blob: aed714c93a3ec9602fe0d55779edb413d7894936 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.fo.pagination;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.expr.NumericProperty;
import org.apache.fop.fo.properties.Property;
/**
* Unit Test for RepeatablePageMasterAlternatives
*
*/
public class RepeatablePageMasterAlternativesTestCase implements Constants {
/**
*
* @throws Exception exception
*/
@Test
public void testIsInfinite1() throws Exception {
// Create fixture
Property maximumRepeats = mock(Property.class);
ConditionalPageMasterReference cpmr = createCPMR("empty");
when(maximumRepeats.getEnum()).thenReturn(EN_NO_LIMIT);
RepeatablePageMasterAlternatives objectUnderTest
= createRepeatablePageMasterAlternatives(cpmr, maximumRepeats);
assertTrue("is infinite", objectUnderTest.isInfinite());
}
/**
*
* @throws Exception exception
*/
@Test
public void testIsInfinite2() throws Exception {
// Create fixture
Property maximumRepeats = mock(Property.class);
ConditionalPageMasterReference cpmr = createCPMR("empty");
NumericProperty numericProperty = mock(NumericProperty.class);
final int maxRepeatNum = 0;
assertTrue(maxRepeatNum != EN_NO_LIMIT);
when(maximumRepeats.getEnum()).thenReturn(maxRepeatNum);
when(maximumRepeats.getNumeric()).thenReturn(numericProperty);
RepeatablePageMasterAlternatives objectUnderTest
= createRepeatablePageMasterAlternatives(createCPMR("empty"),
maximumRepeats);
assertTrue("is infinite", !objectUnderTest.isInfinite());
}
/**
* Test that an infinite sequence of empty page masters has
* willTerminiate() returning false
* @throws Exception exception
*/
@Test
public void testCanProcess1() throws Exception {
// Create fixture
Property maximumRepeats = mock(Property.class);
ConditionalPageMasterReference cpmr = createCPMR("empty");
when(maximumRepeats.getEnum()).thenReturn(EN_NO_LIMIT);
when(cpmr.isValid(anyBoolean(), anyBoolean(), anyBoolean(), anyBoolean()))
.thenReturn(true);
RepeatablePageMasterAlternatives objectUnderTest
= createRepeatablePageMasterAlternatives(cpmr, maximumRepeats);
//Fixture assertion
assertTrue("Should be infinite", objectUnderTest.isInfinite());
//Test assertion
assertTrue("Infinite sequences that do not process the main flow will "
+ " not terminate",
!objectUnderTest.canProcess("main-flow"));
}
/**
* Test that a finite sequence of simple page masters has
* willTerminate() returning true
*
* @throws Exception exception
*/
@Test
public void testCanProcess2() throws Exception {
// Create fixture
Property maximumRepeats = mock(Property.class);
NumericProperty numericProperty = mock(NumericProperty.class);
final int maxRepeatNum = 0;
when(maximumRepeats.getEnum()).thenReturn(maxRepeatNum);
when(maximumRepeats.getNumeric()).thenReturn(numericProperty);
RepeatablePageMasterAlternatives objectUnderTest
= createRepeatablePageMasterAlternatives(createCPMR("empty"),
maximumRepeats);
//Fixture assertion
assertTrue("Should be finite sequence", !objectUnderTest.isInfinite());
//Test assertion
assertTrue("Finite sequences will terminate",
objectUnderTest.canProcess("main-flow"));
}
private ConditionalPageMasterReference createCPMR(String regionName) {
ConditionalPageMasterReference cpmr = mock(ConditionalPageMasterReference.class);
SimplePageMaster master = mock(SimplePageMaster.class);
Region region = mock(Region.class);
when(master.getRegion(anyInt())).thenReturn(region);
when(region.getRegionName()).thenReturn(regionName);
when(cpmr.getMaster()).thenReturn(master);
return cpmr;
}
private RepeatablePageMasterAlternatives createRepeatablePageMasterAlternatives(
ConditionalPageMasterReference cpmr, Property maximumRepeats) throws Exception {
PropertyList pList = mock(PropertyList.class);
when(pList.get(anyInt())).thenReturn(maximumRepeats);
PageSequenceMaster parent = mock(PageSequenceMaster.class);
when(parent.getName()).thenReturn("fo:page-sequence-master");
RepeatablePageMasterAlternatives sut = new RepeatablePageMasterAlternatives(parent);
sut.startOfNode();
sut.bind(pList);
sut.addConditionalPageMasterReference(cpmr);
return sut;
}
}