/*
* 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.flow;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.apache.fop.fo.Constants;
public class MarkersTestCase {
@Test
public void testRegisterAndResolve() {
// consider 3 regions, and a boundary; the first region starts before the boundary and ends inside
// the boundary, the second region is fully inside the boundary, and the third region starts inside
// the boundary and ends after the boundary. in every region there are 2 markers, A and B.
// ======== region 1
Map<String, Marker> markers_region_1 = new HashMap<String, Marker>();
Marker marker_1A = mock(Marker.class);
Marker marker_1B = mock(Marker.class);
markers_region_1.put("A", marker_1A);
markers_region_1.put("B", marker_1B);
// ======== region 2
Map<String, Marker> markers_region_2 = new HashMap<String, Marker>();
Marker marker_2A = mock(Marker.class);
Marker marker_2B = mock(Marker.class);
markers_region_2.put("A", marker_2A);
markers_region_2.put("B", marker_2B);
// ======== region 3
Map<String, Marker> markers_region_3 = new HashMap<String, Marker>();
Marker marker_3A = mock(Marker.class);
Marker marker_3B = mock(Marker.class);
markers_region_3.put("A", marker_3A);
markers_region_3.put("B", marker_3B);
// instantiate markers for the boundary
Markers markers = new Markers();
// register the markers for the different regions
// region 1
markers.register(markers_region_1, true, false, true);
markers.register(markers_region_1, false, false, true);
// region 2
markers.register(markers_region_2, true, true, true);
markers.register(markers_region_2, false, true, true);
// region 3
markers.register(markers_region_3, true, true, false);
markers.register(markers_region_3, false, true, false);
// now prepare a RetrieveMarker
RetrieveMarker rm = mock(RetrieveMarker.class);
when(rm.getRetrieveClassName()).thenReturn("A");
when(rm.getLocalName()).thenReturn("retrieve-marker");
when(rm.getPositionLabel()).thenReturn("position-label"); // not relevant for the test
// and resolve the marker for different positions
// EN_FSWP
when(rm.getPosition()).thenReturn(Constants.EN_FSWP);
// expect marker_2A
assertEquals(marker_2A, markers.resolve(rm));
// EN_LSWP
when(rm.getPosition()).thenReturn(Constants.EN_LSWP);
// expect marker_3A
assertEquals(marker_3A, markers.resolve(rm));
// EN_LEWP
when(rm.getPosition()).thenReturn(Constants.EN_LEWP);
// expect marker_2A
assertEquals(marker_2A, markers.resolve(rm));
// EN_FIC
when(rm.getPosition()).thenReturn(Constants.EN_FIC);
// expect marker_1A
assertEquals(marker_1A, markers.resolve(rm));
// now prepare a RetrieveTableMarker
RetrieveTableMarker rtm = mock(RetrieveTableMarker.class);
when(rtm.getRetrieveClassName()).thenReturn("B");
when(rtm.getLocalName()).thenReturn("retrieve-table-marker");
when(rtm.getPositionLabel()).thenReturn("position-label"); // not relevant for the test
// and resolve the marker for different positions
// EN_FIRST_STARTING
when(rtm.getPosition()).thenReturn(Constants.EN_FIRST_STARTING);
// expect marker_2B
assertEquals(marker_2B, markers.resolve(rtm));
// EN_LAST_STARTING
when(rtm.getPosition()).thenReturn(Constants.EN_LAST_STARTING);
// expect marker_3B
assertEquals(marker_3B, markers.resolve(rtm));
// EN_LAST_ENDING
when(rtm.getPosition()).thenReturn(Constants.EN_LAST_ENDING);
// expect marker_2B
assertEquals(marker_2B, markers.resolve(rtm));
// EN_FIRST_INCLUDING_CARRYOVER
when(rtm.getPosition()).thenReturn(Constants.EN_FIRST_INCLUDING_CARRYOVER);
// expect marker_1B
assertEquals(marker_1B, markers.resolve(rtm));
// test also an invalid position
when(rm.getPosition()).thenReturn(Constants.EN_ABSOLUTE);
try {
Marker m = markers.resolve(rm);
fail("Expected an exception... instead got:" + m.toString());
} catch (RuntimeException re) {
// do nothing
}
}
}