blob: 01686745cd2ac73232f0e0a9801353694880a389 [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.flow.table;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.helpers.AttributesImpl;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.events.EventBroadcaster;
import org.apache.fop.fo.ElementMappingRegistry;
import org.apache.fop.fo.FOEventHandler;
import org.apache.fop.fo.FONodeMocks;
import org.apache.fop.fo.FOValidationEventProducer;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.StaticPropertyList;
import org.apache.fop.fo.ValidationException;
import org.apache.fop.fo.expr.PropertyException;
import org.apache.fop.fo.extensions.ExtensionElementMapping;
import org.apache.fop.util.XMLUtil;
/**
* Tests that the fox:header property is correctly parsed and set up at the FO tree level.
*/
public class HeaderColumnTestCase {
@Test
public void testWrongValue() throws ValidationException {
Table parent = createTableParent();
EventBroadcaster mockEventBroadcaster = FONodeMocks.mockGetEventBroadcaster(
parent.getFOEventHandler().getUserAgent());
FOValidationEventProducer eventProducer = mockGetEventProducerFor(mockEventBroadcaster);
TableColumn column = new TableColumn(parent);
PropertyList propertyList = new StaticPropertyList(column, null);
Attributes atts = createScopeAttribute("blah");
propertyList.addAttributesToList(atts);
verify(eventProducer).invalidPropertyValue(any(), eq("fo:table-column"),
eq("fox:header"), eq("blah"), any(PropertyException.class), nullable(Locator.class));
}
@Test
public void testCorrectValue() throws Exception {
testCorrectValue(true);
testCorrectValue(false);
}
private void testCorrectValue(boolean expectedValue) throws Exception {
Table parent = createTableParent();
FONodeMocks.mockGetColumnNumberManager(parent);
TableColumn column = new TableColumn(parent, true);
PropertyList propertyList = new StaticPropertyList(column, null);
Attributes atts = createScopeAttribute(String.valueOf(expectedValue));
propertyList.addAttributesToList(atts);
column.bind(propertyList);
assertEquals(expectedValue, column.isHeader());
}
private Table createTableParent() {
Table parent = mock(Table.class);
FOEventHandler mockFOEventHandler = FONodeMocks.mockGetFOEventHandler(parent);
FOUserAgent mockUserAgent = mockFOEventHandler.getUserAgent();
mockGetElementMappingRegistry(mockUserAgent);
return parent;
}
private Attributes createScopeAttribute(String value) {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute(ExtensionElementMapping.URI, "header", "fox:header", XMLUtil.CDATA, value);
return atts;
}
private ElementMappingRegistry mockGetElementMappingRegistry(FOUserAgent mockUserAgent) {
ElementMappingRegistry mockRegistry = mock(ElementMappingRegistry.class);
when(mockRegistry.getElementMapping(anyString())).thenReturn(new ExtensionElementMapping());
when(mockUserAgent.getElementMappingRegistry()).thenReturn(mockRegistry);
return mockRegistry;
}
private FOValidationEventProducer mockGetEventProducerFor(EventBroadcaster mockEventBroadcaster) {
FOValidationEventProducer mockEventProducer = mock(FOValidationEventProducer.class);
when(mockEventBroadcaster.getEventProducerFor(eq(FOValidationEventProducer.class)))
.thenReturn(mockEventProducer);
return mockEventProducer;
}
}