1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/*
* 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.fotreetest.ext;
import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FOPropertyMapping;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.properties.KeepProperty;
import org.apache.fop.fo.properties.LengthPairProperty;
import org.apache.fop.fo.properties.LengthRangeProperty;
import org.apache.fop.fo.properties.Property;
import org.apache.fop.fo.properties.SpaceProperty;
import org.apache.fop.fotreetest.ResultCollector;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
/**
* Defines the assert element for the FOP Test extension.
*/
public class AssertElement extends TestObj {
/**
* @see org.apache.fop.fo.FONode#FONode(FONode)
*/
public AssertElement(FONode parent) {
super(parent);
}
/**
* @see org.apache.fop.fo.FONode#processNode
*/
public void processNode(String elementName,
Locator locator,
Attributes attlist,
PropertyList propertyList) throws FOPException {
//super.processNode(elementName, locator, attlist, propertyList);
ResultCollector collector = ResultCollector.getInstance();
String propName = attlist.getValue("property");
String component = null;
int dotIndex = propName.indexOf('.');
if (dotIndex >= 0) {
component = propName.substring(dotIndex + 1);
propName = propName.substring(0, dotIndex);
}
int propID = FOPropertyMapping.getPropertyId(propName);
if (propID < 0) {
collector.notifyException(new IllegalArgumentException(
"Property not found: " + propName));
} else {
Property prop;
prop = propertyList.getParentPropertyList().get(propID);
if (component != null) {
//Access subcomponent
Property mainProp = prop;
prop = null;
LengthPairProperty lpp = mainProp.getLengthPair();
if (lpp != null) {
prop = lpp.getComponent(FOPropertyMapping.getSubPropertyId(component));
}
LengthRangeProperty lrp = mainProp.getLengthRange();
if (lrp != null) {
prop = lrp.getComponent(FOPropertyMapping.getSubPropertyId(component));
}
KeepProperty kp = mainProp.getKeep();
if (kp != null) {
prop = kp.getComponent(FOPropertyMapping.getSubPropertyId(component));
}
SpaceProperty sp = mainProp.getSpace();
if (sp != null) {
prop = sp.getComponent(FOPropertyMapping.getSubPropertyId(component));
}
}
String s = String.valueOf(prop);
String expected = attlist.getValue("expected");
if (!expected.equals(s)) {
collector.notifyException(
new IllegalStateException(locator.getSystemId()
+ "\nProperty '" + propName
+ "' expected to evaluate to '" + expected
+ "' but got '" + s
+ "'\n(test:assert in "
+ propertyList.getParentFObj().getName()
+ " at line #" + locator.getLineNumber()
+ ", column #" + locator.getColumnNumber() + ")\n"));
}
}
}
/** @see org.apache.fop.fo.FONode#getLocalName() */
public String getLocalName() {
return "assert";
}
}
|