1. Project Clover database Mon Dec 22 2025 14:59:38 CST
  2. Package org.europa.together.application

File SaxToolsTest.java

 

Code metrics

4
168
29
1
480
390
33
0.2
5.79
29
1.14

Classes

Class Line # Actions
SaxToolsTest 27 168 0% 33 5
0.9751243697.5%
 

Contributing tests

This file is covered by 25 tests. .

Source view

1    package org.europa.together.application;
2   
3    import static com.google.code.beanmatchers.BeanMatchers.*;
4    import java.io.File;
5    import org.europa.together.JUnit5Preperator;
6    import org.europa.together.business.Logger;
7    import org.europa.together.business.XmlTools;
8    import org.europa.together.domain.LogLevel;
9    import org.europa.together.utils.Constraints;
10    import org.europa.together.utils.FileUtils;
11    import static org.hamcrest.MatcherAssert.assertThat;
12    import org.junit.jupiter.api.AfterAll;
13    import org.junit.jupiter.api.AfterEach;
14    import static org.junit.jupiter.api.Assertions.*;
15    import org.junit.jupiter.api.Assumptions;
16    import org.junit.jupiter.api.BeforeAll;
17    import org.junit.jupiter.api.BeforeEach;
18    import org.junit.jupiter.api.Test;
19    import org.junit.jupiter.api.extension.ExtendWith;
20    import org.springframework.beans.factory.annotation.Autowired;
21    import org.springframework.test.context.ContextConfiguration;
22    import org.springframework.test.context.junit.jupiter.SpringExtension;
23   
24    @SuppressWarnings("unchecked")
25    @ExtendWith({SpringExtension.class, JUnit5Preperator.class})
26    @ContextConfiguration(locations = {"/applicationContext.xml"})
 
27    public class SaxToolsTest {
28   
29    private static final Logger LOGGER
30    = new LogbackLogger(SaxToolsTest.class);
31    private static final String FILE_PATH
32    = "org/europa/together/xml";
33    private static final String DIRECTORY
34    = Constraints.SYSTEM_APP_DIR + "/target/test-classes/" + FILE_PATH;
35   
36    private static final File DTD
37    = new File(Constraints.SYSTEM_APP_DIR + "/simple.dtd");
38    private static final File SCHEMA
39    = new File(Constraints.SYSTEM_APP_DIR + "/simple.xsd");
40   
41    @Autowired
42    private XmlTools xmlTools;
43   
44    //<editor-fold defaultstate="collapsed" desc="Test Preparation">
 
45  1 toggle @BeforeAll
46    static void setUp() {
47  1 try {
48  1 FileUtils.copyFile(new File(DIRECTORY + "/simple.dtd"), DTD);
49  1 FileUtils.copyFile(new File(DIRECTORY + "/simple.xsd"), SCHEMA);
50    } catch (Exception ex) {
51  0 LOGGER.catchException(ex);
52  0 Assumptions.assumeTrue(false, "XML grammar definition files faild to copy.");
53    }
54   
55  1 LOGGER.log("Assumptions passed ...\n\n", LogLevel.DEBUG);
56    }
57   
 
58  1 toggle @AfterAll
59    static void tearDown() {
60  1 if (DTD.exists()) {
61  1 DTD.delete();
62    }
63  1 if (SCHEMA.exists()) {
64  1 SCHEMA.delete();
65    }
66    }
67   
 
68  25 toggle @BeforeEach
69    void testCaseInitialization() {
70    }
71   
 
72  25 toggle @AfterEach
73    void testCaseTermination() {
74    }
75    //</editor-fold>
76   
 
77  1 toggle @Test
78    void constructor() {
79  1 LOGGER.log("TEST CASE: constructor", LogLevel.DEBUG);
80   
81  1 assertThat(SaxTools.class, hasValidBeanConstructor());
82    }
83   
 
84  1 toggle @Test
85    void parseXmlString() throws Exception {
86  1 LOGGER.log("TEST CASE: parseXmlString", LogLevel.DEBUG);
87   
88  1 xmlTools = new SaxTools();
89  1 String xml = FileUtils.readFileStream(new File(DIRECTORY + "/test_wellformed.xml"));
90  1 String output = xmlTools.parseXmlString(xml);
91  1 String compare = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
92    + "\n"
93    + "<root xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"
94    + "\n"
95    + " <!-- COMMENT -->\n"
96    + " <![CDATA[cdata element content]]>\n"
97    + "\n"
98    + " <node>\n"
99    + " <child>child 1</child>\n"
100    + " <child>child 2</child>\n"
101    + " <child>child 2</child>\n"
102    + " </node>\n"
103    + "\n"
104    + " <attribute value=\"attribute a\">attribute node</attribute>\n"
105    + "\n"
106    + " <emptyTag />\n"
107    + "\n"
108    + " <char>\n"
109    + " <escape>&#0060;</escape>\n"
110    + " <escape>&#0062;</escape>\n"
111    + " <escape>&#0039;</escape>\n"
112    + " <escape>&#0034;</escape>\n"
113    + " </char>\n"
114    + "</root>\n";
115   
116  1 assertNotNull(output);
117  1 assertEquals(compare, output);
118    }
119   
 
120  1 toggle @Test
121    void failParseXmlString() {
122  1 LOGGER.log("TEST CASE: failParseXmlString", LogLevel.DEBUG);
123   
124  1 xmlTools = new SaxTools();
125  1 assertNull(xmlTools.parseXmlString(null));
126    }
127   
 
128  1 toggle @Test
129    void parseXmlFile() {
130  1 LOGGER.log("TEST CASE: parseXmlFile", LogLevel.DEBUG);
131   
132  1 xmlTools = new SaxTools();
133  1 String output = xmlTools.parseXmlFile(new File(DIRECTORY + "/test_wellformed.xml"));
134  1 String compare = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
135    + "\n"
136    + "<root xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"
137    + "\n"
138    + " <!-- COMMENT -->\n"
139    + " <![CDATA[cdata element content]]>\n"
140    + "\n"
141    + " <node>\n"
142    + " <child>child 1</child>\n"
143    + " <child>child 2</child>\n"
144    + " <child>child 2</child>\n"
145    + " </node>\n"
146    + "\n"
147    + " <attribute value=\"attribute a\">attribute node</attribute>\n"
148    + "\n"
149    + " <emptyTag />\n"
150    + "\n"
151    + " <char>\n"
152    + " <escape>&#0060;</escape>\n"
153    + " <escape>&#0062;</escape>\n"
154    + " <escape>&#0039;</escape>\n"
155    + " <escape>&#0034;</escape>\n"
156    + " </char>\n"
157    + "</root>\n";
158   
159  1 assertNotNull(output);
160  1 assertEquals(compare, output);
161    }
162   
 
163  1 toggle @Test
164    void failParsingXmlFile() {
165  1 LOGGER.log("TEST CASE: failParseXmlFile", LogLevel.DEBUG);
166   
167  1 xmlTools = new SaxTools();
168  1 assertNull(xmlTools.parseXmlFile(null));
169    }
170   
 
171  1 toggle @Test
172    void isWellFormed() {
173  1 LOGGER.log("TEST CASE: isWellFormed", LogLevel.DEBUG);
174   
175  1 xmlTools = new SaxTools();
176  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_wellformed.xml"));
177  1 assertTrue(xmlTools.isWellFormed());
178    }
179   
 
180  1 toggle @Test
181    void isNotWellFormed() {
182  1 LOGGER.log("TEST CASE: isNotWellFormed", LogLevel.DEBUG);
183   
184  1 xmlTools = new SaxTools();
185   
186  1 LOGGER.log("Case Sensitive call", LogLevel.DEBUG);
187  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_non_wellformed_01.xml"));
188  1 assertFalse(xmlTools.isWellFormed());
189   
190  1 LOGGER.log("Missing close TAG call", LogLevel.DEBUG);
191  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_non_wellformed_02.xml"));
192  1 assertFalse(xmlTools.isWellFormed());
193   
194  1 LOGGER.log("Mixted TAG order call", LogLevel.DEBUG);
195  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_non_wellformed_03.xml"));
196  1 assertFalse(xmlTools.isWellFormed());
197   
198  1 LOGGER.log("no ROOT Element call", LogLevel.DEBUG);
199  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_non_wellformed_04.xml"));
200  1 assertFalse(xmlTools.isWellFormed());
201   
202  1 LOGGER.log("character escape failure call", LogLevel.DEBUG);
203  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_non_wellformed_05.xml"));
204  1 assertFalse(xmlTools.isWellFormed());
205    }
206   
 
207  1 toggle @Test
208    void failPrettyPrint() {
209  1 LOGGER.log("TEST CASE: failPrettyPrint", LogLevel.DEBUG);
210   
211  1 xmlTools = new SaxTools();
212  1 xmlTools.parseXmlFile(null);
213  1 assertNull(xmlTools.prettyPrintXml());
214    }
215   
 
216  1 toggle @Test
217    // @Disabled
218    void prettyPrintXml() {
219  1 LOGGER.log("TEST CASE: prettyPrint", LogLevel.DEBUG);
220   
221  1 String reference = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
222    + "\n"
223    + "<!DOCTYPE EmployeeInfo SYSTEM \"simple.dtd\">\n"
224    + "<!-- THIs Is AN XML COMMENT -->\n"
225    + "<EmployeeInfo xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
226    + " xmlns:e=\"http://www.sample.com/EmployeeInfo\" \n"
227    + " xsi:schemaLocation=\"http://www.sample.com/EmployeeInfo simple.xsd\">\n"
228    + " <!-- THIs Is AN XML COMMENT -->\n"
229    + " <![CDATA[some stuff]]>\n"
230    + " <Employee EmployeeNumber=\"1\">\n"
231    + " <!-- THIs Is AN XML COMMENT -->\n"
232    + " <Name>Masashi Okamura</Name>\n"
233    + " <Department>Design Department</Department>\n"
234    + " <Telephone>03-1452-4567</Telephone>\n"
235    + " <Email>okamura@xmltr.co.jp\n"
236    + " <!-- THIs Is AN XML COMMENT --></Email>\n"
237    + " <Email>okamura@xmltr.co.jp</Email>\n"
238    + " <XXX>\n"
239    + " <ABC>03-1452-4567</ABC>\n"
240    + " <!-- THIs Is AN XML COMMENT -->\n"
241    + " </XXX>\n"
242    + " </Employee>\n"
243    + "</EmployeeInfo>\n";
244   
245  1 xmlTools = new SaxTools();
246  1 String input = xmlTools.parseXmlFile(new File(DIRECTORY + "/test_pretty_print_01.xml"));
247  1 String output = xmlTools.prettyPrintXml();
248  1 assertNotEquals(input, output);
249  1 assertEquals(reference, output);
250    }
251   
 
252  1 toggle @Test
253    void prettyPrintXmlInlineDtd() {
254  1 LOGGER.log("TEST CASE: prettyPrintXmlInlineDtd", LogLevel.DEBUG);
255   
256  1 try {
257  1 xmlTools = new SaxTools();
258  1 String input = xmlTools.parseXmlFile(new File(DIRECTORY + "/test_pretty_print_02.xml"));
259  1 assertTrue(xmlTools.isWellFormed());
260   
261  1 String output = xmlTools.prettyPrintXml();
262  1 String reference = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
263    + "\n"
264    + "<!DOCTYPE EmployeeInfo [\n"
265    + " <!ELEMENT EmployeeInfo (Employee)*>\n"
266    + " <!ELEMENT Employee (Name,Department,Telephone,Email)>\n"
267    + " <!ELEMENT Name (#PCDATA)>\n"
268    + " <!ELEMENT Department (#PCDATA)>\n"
269    + " <!ELEMENT Telephone (#PCDATA)>\n"
270    + " <!ELEMENT Email (#PCDATA)>\n"
271    + " <!ATTLIST Employee EmployeeNumber CDATA #REQUIRED>\n"
272    + "]>\n"
273    + "<EmployeeInfo>\n"
274    + " <![CDATA[some stuff]]>\n"
275    + " <Employee EmployeeNumber=\"105\">\n"
276    + " <Name>Masashi Okamura</Name>\n"
277    + " <Department>Design Department</Department>\n"
278    + " <Telephone>03-1452-4567</Telephone>\n"
279    + " <Email>okamura@xmltr.co.jp</Email>\n"
280    + " </Employee>\n"
281    + " <!-- THIs Is AN XML COMMENT -->\n"
282    + "</EmployeeInfo>\n";
283   
284  1 assertNotEquals(input, output);
285  1 assertEquals(reference, output);
286   
287    } catch (Exception ex) {
288  0 LOGGER.catchException(ex);
289    }
290    }
291   
 
292  1 toggle @Test
293    void writeXmlToFile() throws Exception {
294  1 LOGGER.log("TEST CASE: writeXmlToFile", LogLevel.DEBUG);
295   
296  1 xmlTools = new SaxTools();
297  1 String newFilePath = DIRECTORY + "/new_xml_file.xml";
298  1 String xmlFileContent = xmlTools.parseXmlFile(new File(DIRECTORY + "/test_wellformed.xml"));
299   
300  1 xmlTools.writeXmlToFile(xmlFileContent, newFilePath);
301   
302  1 File file = new File(newFilePath);
303  1 assertTrue(file.exists());
304  1 file.delete();
305  1 assertFalse(file.exists());
306    }
307   
 
308  1 toggle @Test
309    void failWriteXmlToFile() throws Exception {
310  1 LOGGER.log("TEST CASE: failWriteXmlToFile", LogLevel.DEBUG);
311   
312  1 xmlTools = new SaxTools();
313  1 assertThrows(Exception.class, () -> {
314  1 xmlTools.writeXmlToFile("", null);
315    });
316    }
317   
 
318  1 toggle @Test
319    void noGrammar() {
320  1 LOGGER.log("TEST CASE: noGrammar", LogLevel.DEBUG);
321   
322  1 xmlTools = new SaxTools();
323  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_no_grammar.xml"));
324  1 assertTrue(xmlTools.isWellFormed());
325  1 assertFalse(xmlTools.isValid());
326    }
327   
 
328  1 toggle @Test
329    void failValidation() {
330  1 LOGGER.log("TEST CASE: failValidation", LogLevel.DEBUG);
331   
332  1 xmlTools = new SaxTools();
333  1 xmlTools.parseXmlFile(new File(""));
334  1 assertFalse(xmlTools.isWellFormed());
335  1 assertFalse(xmlTools.isValid());
336    }
337   
 
338  1 toggle @Test
339    void validInternalDtd() {
340  1 LOGGER.log("TEST CASE: validInternalDtd", LogLevel.DEBUG);
341   
342  1 xmlTools = new SaxTools();
343  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_dtd_valid_internal.xml"));
344  1 assertTrue(xmlTools.isWellFormed());
345  1 assertTrue(xmlTools.isValid());
346    }
347   
 
348  1 toggle @Test
349    void invalidDtd() {
350  1 LOGGER.log("TEST CASE: invalidDtd", LogLevel.DEBUG);
351   
352  1 xmlTools = new SaxTools();
353  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_dtd_invalid.xml"));
354  1 assertTrue(xmlTools.isWellFormed());
355  1 assertFalse(xmlTools.isValid());
356    }
357   
 
358  1 toggle @Test
359    void vValidDtd() {
360  1 LOGGER.log("TEST CASE: invalidDtd", LogLevel.DEBUG);
361   
362  1 xmlTools = new SaxTools();
363  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_dtd_valid.xml"));
364  1 assertTrue(xmlTools.isWellFormed());
365  1 assertTrue(xmlTools.isValid());
366    }
367   
 
368  1 toggle @Test
369    void failSetSchema() {
370  1 LOGGER.log("TEST CASE: failSetSchema", LogLevel.DEBUG);
371   
372  1 xmlTools = new SaxTools();
373  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_schema_valid.xml"));
374  1 assertTrue(xmlTools.isWellFormed());
375   
376  1 LOGGER.log("CASE 1: NULL", LogLevel.DEBUG);
377  1 xmlTools.setSchemaFile(null);
378  1 assertFalse(xmlTools.hasExternalSchemaFile());
379   
380  1 LOGGER.log("CASE 2: Schema File not exist", LogLevel.DEBUG);
381  1 xmlTools.setSchemaFile(new File(DIRECTORY + "/no_schema.xsd"));
382  1 assertFalse(xmlTools.hasExternalSchemaFile());
383    }
384   
 
385  1 toggle @Test
386    void setSchema() {
387  1 LOGGER.log("TEST CASE: setSchema", LogLevel.DEBUG);
388   
389  1 xmlTools = new SaxTools();
390  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_schema_valid.xml"));
391  1 assertFalse(xmlTools.hasExternalSchemaFile());
392   
393  1 xmlTools.setSchemaFile(new File(DIRECTORY + "/simple.xsd"));
394  1 assertTrue(xmlTools.hasExternalSchemaFile());
395   
396  1 assertTrue(xmlTools.isWellFormed());
397  1 assertTrue(xmlTools.isValid());
398    }
399   
 
400  1 toggle @Test
401    void resetExternalSchemaFile() {
402  1 LOGGER.log("TEST CASE: resetExternalSchemaFile", LogLevel.DEBUG);
403   
404  1 xmlTools = new SaxTools();
405  1 assertFalse(xmlTools.hasExternalSchemaFile());
406   
407  1 xmlTools.setSchemaFile(new File(DIRECTORY + "/simple.xsd"));
408  1 assertTrue(xmlTools.hasExternalSchemaFile());
409   
410  1 xmlTools.resetExternalSchema();
411  1 assertFalse(xmlTools.hasExternalSchemaFile());
412    }
413   
 
414  1 toggle @Test
415    void invalidSchema() {
416  1 LOGGER.log("TEST CASE: invalidSchema", LogLevel.DEBUG);
417   
418  1 xmlTools = new SaxTools();
419  1 xmlTools.parseXmlFile(new File(DIRECTORY + "/test_schema_invalid.xml"));
420  1 xmlTools.setSchemaFile(new File(DIRECTORY + "/simple.xsd"));
421  1 assertTrue(xmlTools.isWellFormed());
422  1 assertFalse(xmlTools.isValid());
423    }
424   
 
425  1 toggle @Test
426    void validSchemaByWebResorce() {
427  1 LOGGER.log("TEST CASE: validSchemaByWebResorce", LogLevel.DEBUG);
428   
429  1 xmlTools = new SaxTools();
430    //check spring config
431  1 String xmlFile = Constraints.SYSTEM_APP_DIR
432    + "/target/test-classes/org/europa/together/xml/spring.xml";
433  1 xmlTools.parseXmlFile(new File(xmlFile));
434   
435  1 xmlTools.prettyPrintXml();
436   
437  1 assertTrue(xmlTools.isWellFormed());
438  1 assertTrue(xmlTools.isValid());
439    }
440   
 
441  1 toggle @Test
442    void xsltTransformation() {
443  1 LOGGER.log("TEST CASE: xsltTransformation", LogLevel.DEBUG);
444   
445  1 xmlTools = new SaxTools();
446  1 String xml = DIRECTORY + "/xml_datasource.xml";
447  1 String xslt = DIRECTORY + "/template.xslt";
448  1 String transformed = xmlTools.transformXslt(new File(xml), new File(xslt));
449   
450    //fix problems with whitespace - just to see if the transformation works well
451  1 String out = xmlTools.shrinkContent(transformed);
452   
453  1 LOGGER.log(">>> XSLT; \n " + out, LogLevel.DEBUG);
454  1 assertEquals(857, out.length());
455    }
456   
 
457  1 toggle @Test
458    void failTransformation() {
459  1 LOGGER.log("TEST CASE: failXsltTransformation", LogLevel.DEBUG);
460   
461  1 xmlTools = new SaxTools();
462  1 assertEquals("", xmlTools.transformXslt(null, null));
463    }
464   
 
465  1 toggle @Test
466    void shrinkXml() throws Exception {
467  1 LOGGER.log("TEST CASE: shrinkXml", LogLevel.DEBUG);
468   
469  1 String file = Constraints.SYSTEM_APP_DIR
470    + "/target/test-classes/org/europa/together/xml/shrink.xml";
471  1 String orgin = FileUtils.readFileStream(new File(file));
472   
473  1 xmlTools = new SaxTools();
474  1 String transform = xmlTools.shrinkContent(orgin);
475   
476  1 assertNotEquals(orgin, transform);
477  1 xmlTools.parseXmlString(transform);
478  1 assertTrue(xmlTools.isWellFormed());
479    }
480    }