1
+ <?php
2
+ namespace PHPWord \Tests ;
3
+
4
+ use PHPWord_Template ;
5
+
6
+ /**
7
+ * @coversDefaultClass PHPWord_Template
8
+ */
9
+ class PHPWord_TemplateTest extends \PHPUnit_Framework_TestCase
10
+ {
11
+ /**
12
+ * @covers ::applyXslStyleSheet
13
+ * @test
14
+ */
15
+ final public function testXslStyleSheetCanBeApplied ()
16
+ {
17
+ $ template = new PHPWord_Template (
18
+ \join (
19
+ \DIRECTORY_SEPARATOR ,
20
+ array (\PHPWORD_TESTS_DIR_ROOT , '_files ' , 'templates ' , 'with_table_macros.docx ' )
21
+ )
22
+ );
23
+
24
+ $ xslDOMDocument = new \DOMDocument ();
25
+ $ xslDOMDocument ->load (
26
+ \join (
27
+ \DIRECTORY_SEPARATOR ,
28
+ array (\PHPWORD_TESTS_DIR_ROOT , '_files ' , 'xsl ' , 'remove_tables_by_needle.xsl ' )
29
+ )
30
+ );
31
+
32
+ foreach (array ('${employee. ' , '${scoreboard. ' ) as $ needle ) {
33
+ $ template ->applyXslStyleSheet ($ xslDOMDocument , array ('needle ' => $ needle ));
34
+ }
35
+
36
+ $ actualDocument = $ template ->save ();
37
+ $ expectedDocument = \join (
38
+ \DIRECTORY_SEPARATOR ,
39
+ array (\PHPWORD_TESTS_DIR_ROOT , '_files ' , 'documents ' , 'without_table_macros.docx ' )
40
+ );
41
+
42
+ $ actualZip = new \ZipArchive ();
43
+ $ actualZip ->open ($ actualDocument );
44
+ $ actualXml = $ actualZip ->getFromName ('word/document.xml ' );
45
+ if ($ actualZip ->close () === false ) {
46
+ throw new \Exception ('Could not close zip file " ' . $ actualDocument . '". ' );
47
+ }
48
+
49
+ $ expectedZip = new \ZipArchive ();
50
+ $ expectedZip ->open ($ expectedDocument );
51
+ $ expectedXml = $ expectedZip ->getFromName ('word/document.xml ' );
52
+ if ($ expectedZip ->close () === false ) {
53
+ throw new \Exception ('Could not close zip file " ' . $ expectedDocument . '". ' );
54
+ }
55
+
56
+ $ this ->assertXmlStringEqualsXmlString ($ expectedXml , $ actualXml );
57
+ }
58
+
59
+ /**
60
+ * @covers ::applyXslStyleSheet
61
+ * @expectedException Exception
62
+ * @expectedExceptionMessage Could not set values for the given XSL style sheet parameters.
63
+ * @test
64
+ */
65
+ final public function testXslStyleSheetCanNotBeAppliedOnFailureOfSettingParameterValue ()
66
+ {
67
+ $ template = new PHPWord_Template (
68
+ \join (
69
+ \DIRECTORY_SEPARATOR ,
70
+ array (\PHPWORD_TESTS_DIR_ROOT , '_files ' , 'templates ' , 'blank.docx ' )
71
+ )
72
+ );
73
+
74
+ $ xslDOMDocument = new \DOMDocument ();
75
+ $ xslDOMDocument ->load (
76
+ \join (
77
+ \DIRECTORY_SEPARATOR ,
78
+ array (\PHPWORD_TESTS_DIR_ROOT , '_files ' , 'xsl ' , 'passthrough.xsl ' )
79
+ )
80
+ );
81
+
82
+ /*
83
+ * We have to use error control below, because XSLTProcessor::setParameter omits warning on failure.
84
+ * This warning fails the test.
85
+ */
86
+ @$ template ->applyXslStyleSheet ($ xslDOMDocument , array (1 => 'somevalue ' ));
87
+ }
88
+
89
+ /**
90
+ * @covers ::applyXslStyleSheet
91
+ * @expectedException Exception
92
+ * @expectedExceptionMessage Could not load XML from the given template.
93
+ * @test
94
+ */
95
+ final public function testXslStyleSheetCanNotBeAppliedOnFailureOfLoadingXmlFromTemplate ()
96
+ {
97
+ $ template = new PHPWord_Template (
98
+ \join (
99
+ \DIRECTORY_SEPARATOR ,
100
+ array (\PHPWORD_TESTS_DIR_ROOT , '_files ' , 'templates ' , 'corrupted_main_document_part.docx ' )
101
+ )
102
+ );
103
+
104
+ $ xslDOMDocument = new \DOMDocument ();
105
+ $ xslDOMDocument ->load (
106
+ \join (
107
+ \DIRECTORY_SEPARATOR ,
108
+ array (\PHPWORD_TESTS_DIR_ROOT , '_files ' , 'xsl ' , 'passthrough.xsl ' )
109
+ )
110
+ );
111
+
112
+ /*
113
+ * We have to use error control below, because DOMDocument::loadXML omits warning on failure.
114
+ * This warning fails the test.
115
+ */
116
+ @$ template ->applyXslStyleSheet ($ xslDOMDocument );
117
+ }
118
+ }
0 commit comments