1
package com.thaiopensource.xml.infer;
3
import java.io.IOException;
4
import java.io.StringReader;
7
import org.testng.Assert;
8
import org.testng.annotations.DataProvider;
9
import org.testng.annotations.Test;
10
import org.xml.sax.InputSource;
11
import org.xml.sax.SAXException;
12
import org.xml.sax.XMLReader;
14
import com.thaiopensource.datatype.xsd.DatatypeLibraryFactoryImpl;
15
import com.thaiopensource.datatype.xsd.regex.java.RegexEngineImpl;
16
import com.thaiopensource.resolver.xml.sax.SAXResolver;
17
import com.thaiopensource.xml.util.Name;
20
* Test the inference handler
22
public class TestInferHandler {
23
@DataProvider(name = "samples")
24
public Object[][] createDateSamples() {
25
return new Object[][] {
28
+ " <element att=\"true\"/>\n"
29
+ " <element att=\"false\"/>\n"
30
+ " <element att=\"true\"/>\n"
36
+ " <element att=\"1\"/>\n"
37
+ " <element att=\"2\"/>\n"
38
+ " <element att=\"3\"/>\n"
44
+ " <element att=\"1.1\"/>\n"
45
+ " <element att=\"0.3\"/>\n"
46
+ " <element att=\"90\"/>\n"
52
+ " <element att=\"1.23E100\"/>\n"
53
+ " <element att=\"2\"/>\n"
54
+ " <element att=\"2.34\"/>\n"
60
+ " <element att=\"test\"/>\n"
61
+ " <element att=\"x\"/>\n"
62
+ " <element att=\"y\"/>\n"
68
+ " <element att=\"12:23:00\"/>\n"
69
+ " <element att=\"10:01:11-05:00\"/>\n"
70
+ " <element att=\"09:01:07Z\"/>\n"
76
+ " <element att=\"2012-10-09\"/>\n"
77
+ " <element att=\"2010-02-01\"/>\n"
78
+ " <element att=\"2009-10-10\"/>\n"
84
+ " <element att=\"2010-01-20T08:00:10\"/>\n"
85
+ " <element att=\"2012-02-01T10:00:03-05:00\"/>\n"
86
+ " <element att=\"2010-01-20T12:00:00Z\"/>\n"
92
+ " <element att=\"P364D\"/>\n"
93
+ " <element att=\"P1347Y\"/>\n"
94
+ " <element att=\"-P1347M\"/>\n"
100
+ " <element att=\"0FB70FB70FB70FB70FB70FB70FB70FB70"
101
+ "FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70"
102
+ "FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70"
103
+ "FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70FB70"
105
+ " <element att=\"AFB7\"/>\n"
106
+ " <element att=\"DF\"/>\n"
112
+ " <element att=\"x:a\"/>\n"
113
+ " <element att=\"_b-c.32\"/>\n"
114
+ " <element att=\"test\"/>\n"
120
+ " <element att=\"\n"
121
+ " AABBCCDDEEFFAABBCCDDEEFFAABBCCDDEEFFAABBCCDDEEFF\n"
122
+ " AABBCCDDEEFFAABBCCDDEEFFAABBCCDDEEFFAABBCCDDEEFF\n"
123
+ " AABBCCDDEEFFAABBCCDDEEFFAABBCCDDEEFFAABBCCDDEEFF\"/>\n"
124
+ " <element att=\"AABBCCDDEEFFAA==\"/>\n"
125
+ " <element att=\"AABBCCDDEEAAAAAA\"/>\n"
131
+ " <element att=\"http://www.example.com\"/>\n"
132
+ " <element att=\"test#a10\"/>\n"
133
+ " <element att=\"ftp://server/path/to/file.xml\"/>\n"
140
@Test(dataProvider = "samples")
141
public void testTypeInferenceForAttribute(String xmlSource, String type)
142
throws SAXException, IOException {
143
InferHandler handler = new InferHandler(new DatatypeLibraryFactoryImpl(new RegexEngineImpl()));
144
SAXResolver resolver = new SAXResolver();
145
XMLReader xr = resolver.createXMLReader();
146
xr.setContentHandler(handler);
147
xr.parse(new InputSource(new StringReader(xmlSource)));
148
Schema schema = handler.getSchema();
149
for (Map.Entry<Name, ElementDecl> entry : schema.getElementDecls()
151
Name name = entry.getKey();
152
ElementDecl elementDecl = entry.getValue();
153
if ("element".equals(name.getLocalName())) {
154
for (Map.Entry<Name, AttributeDecl> attEntry : elementDecl.getAttributeDecls().entrySet()) {
155
AttributeDecl att = attEntry.getValue();
156
Name attName = attEntry.getKey();
157
if ("att".equals(attName.getLocalName())) {
158
Name typeName = att.getDatatype();
159
Assert.assertEquals(typeName.getLocalName(), type);
b'\\ No newline at end of file'