Branch data Line data Source code
1 : : /*
2 : : * Version: MPL 1.1 / GPLv3+ / LGPLv3+
3 : : *
4 : : * The contents of this file are subject to the Mozilla Public License Version
5 : : * 1.1 (the "License"); you may not use this file except in compliance with
6 : : * the License. You may obtain a copy of the License at
7 : : * http://www.mozilla.org/MPL/
8 : : *
9 : : * Software distributed under the License is distributed on an "AS IS" basis,
10 : : * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 : : * for the specific language governing rights and limitations under the
12 : : * License.
13 : : *
14 : : * The Initial Developer of the Original Code is
15 : : * Miklos Vajna <vmiklos@suse.cz> (SUSE, Inc.)
16 : : * Portions created by the Initial Developer are Copyright (C) 2012 the
17 : : * Initial Developer. All Rights Reserved.
18 : : *
19 : : * Contributor(s):
20 : : *
21 : : * Alternatively, the contents of this file may be used under the terms of
22 : : * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
23 : : * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
24 : : * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
25 : : * instead of those above.
26 : : */
27 : :
28 : : #include "../swmodeltestbase.hxx"
29 : :
30 : : #include <com/sun/star/frame/XStorable.hpp>
31 : : #include <com/sun/star/style/TabStop.hpp>
32 : : #include <com/sun/star/view/XViewSettingsSupplier.hpp>
33 : :
34 : : #include <unotools/tempfile.hxx>
35 : :
36 : : using rtl::OUString;
37 : :
38 [ - + ]: 171 : class Test : public SwModelTestBase
39 : : {
40 : : public:
41 : : void testZoom();
42 : : void defaultTabStopNotInStyles();
43 : : void testFdo38244();
44 : : void testMathEscape();
45 : : void testFdo51034();
46 : : void testMathAccents();
47 : : void testMathD();
48 : : void testMathEscaping();
49 : : void testMathLim();
50 : : void testMathMalformedXml();
51 : : void testMathMatrix();
52 : : void testMathMso2k7();
53 : : void testMathNary();
54 : : void testMathOverbraceUnderbrace();
55 : : void testMathOverstrike();
56 : : void testMathPlaceholders();
57 : : void testMathRad();
58 : : void testMathSubscripts();
59 : : void testMathVerticalStacks();
60 : :
61 [ + - ][ + - ]: 6 : CPPUNIT_TEST_SUITE(Test);
[ + - ][ + - ]
[ # # ]
62 : : #if !defined(MACOSX) && !defined(WNT)
63 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testZoom);
[ + - ][ + - ]
[ + - ][ + - ]
64 [ + - ][ + - ]: 3 : CPPUNIT_TEST(defaultTabStopNotInStyles);
[ + - ][ + - ]
[ + - ][ + - ]
65 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testFdo38244);
[ + - ][ + - ]
[ + - ][ + - ]
66 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathEscape);
[ + - ][ + - ]
[ + - ][ + - ]
67 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testFdo51034);
[ + - ][ + - ]
[ + - ][ + - ]
68 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathAccents);
[ + - ][ + - ]
[ + - ][ + - ]
69 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathD);
[ + - ][ + - ]
[ + - ][ + - ]
70 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathEscaping);
[ + - ][ + - ]
[ + - ][ + - ]
71 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathLim);
[ + - ][ + - ]
[ + - ][ + - ]
72 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathMalformedXml);
[ + - ][ + - ]
[ + - ][ + - ]
73 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathMatrix);
[ + - ][ + - ]
[ + - ][ + - ]
74 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathMso2k7);
[ + - ][ + - ]
[ + - ][ + - ]
75 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathNary);
[ + - ][ + - ]
[ + - ][ + - ]
76 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathOverbraceUnderbrace);
[ + - ][ + - ]
[ + - ][ + - ]
77 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathOverstrike);
[ + - ][ + - ]
[ + - ][ + - ]
78 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathPlaceholders);
[ + - ][ + - ]
[ + - ][ + - ]
79 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathRad);
[ + - ][ + - ]
[ + - ][ + - ]
80 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathSubscripts);
[ + - ][ + - ]
[ + - ][ + - ]
81 [ + - ][ + - ]: 3 : CPPUNIT_TEST(testMathVerticalStacks);
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
82 : : #endif
83 [ + - ][ + - ]: 6 : CPPUNIT_TEST_SUITE_END();
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
84 : :
85 : : private:
86 : : void roundtrip(const OUString& rURL);
87 : : };
88 : :
89 : 57 : void Test::roundtrip(const OUString& rFilename)
90 : : {
91 [ + - ][ + - ]: 57 : uno::Reference<lang::XComponent> xImported = loadFromDesktop(getURLFromSrc("/sw/qa/extras/ooxmlexport/data/") + rFilename);
92 [ + - ]: 57 : uno::Reference<frame::XStorable> xStorable(xImported, uno::UNO_QUERY);
93 [ + - ]: 57 : uno::Sequence<beans::PropertyValue> aArgs(1);
94 [ + - ]: 57 : aArgs[0].Name = "FilterName";
95 [ + - ][ + - ]: 57 : aArgs[0].Value <<= OUString("Office Open XML Text");
96 [ + - ]: 57 : utl::TempFile aTempFile;
97 : 57 : aTempFile.EnableKillingFile();
98 [ + - ][ + - ]: 57 : xStorable->storeToURL(aTempFile.GetURL(), aArgs);
[ + - ][ + - ]
[ + - ]
99 [ + - ]: 57 : uno::Reference<lang::XComponent> xComponent(xStorable, uno::UNO_QUERY);
100 [ + - ][ + - ]: 57 : xComponent->dispose();
101 [ + - ][ + - ]: 57 : mxComponent = loadFromDesktop(aTempFile.GetURL());
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
102 : 57 : }
103 : :
104 : 3 : void Test::testZoom()
105 : : {
106 [ + - ]: 3 : roundtrip("zoom.docx");
107 : :
108 [ + - ]: 3 : uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
109 [ + - ][ + - ]: 3 : uno::Reference<view::XViewSettingsSupplier> xViewSettingsSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
[ + - ]
110 [ + - ][ + - ]: 3 : uno::Reference<beans::XPropertySet> xPropertySet(xViewSettingsSupplier->getViewSettings());
111 : 3 : sal_Int16 nValue = 0;
112 [ + - ][ + - ]: 3 : xPropertySet->getPropertyValue("ZoomValue") >>= nValue;
113 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL(sal_Int16(42), nValue);
[ + - ][ + - ]
[ + - ]
114 : 3 : }
115 : :
116 : 3 : void Test::defaultTabStopNotInStyles()
117 : : {
118 [ + - ]: 3 : roundtrip( "empty.odt" );
119 : : // The default tab stop was mistakenly exported to a style.
120 : : // xray ThisComponent.StyleFamilies(1)(0).ParaTabStop
121 [ + - ]: 3 : uno::Reference< container::XNameAccess > paragraphStyles = getStyles( "ParagraphStyles" );
122 [ + - ][ + - ]: 3 : uno::Reference< beans::XPropertySet > properties( paragraphStyles->getByName( "Standard" ), uno::UNO_QUERY );
[ + - ]
123 : : uno::Sequence< style::TabStop > stops = getProperty< uno::Sequence< style::TabStop > >(
124 [ + - ][ + - ]: 3 : paragraphStyles->getByName( "Standard" ), "ParaTabStops" );
[ + - ]
125 : : // There actually be be one tab stop, but it will be the default.
126 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(1), stops.getLength());
[ + - ][ + - ]
[ + - ]
127 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL( style::TabAlign_DEFAULT, stops[ 0 ].Alignment );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
128 : 3 : }
129 : :
130 : 3 : void Test::testFdo38244()
131 : : {
132 [ + - ]: 3 : roundtrip("fdo38244.docx");
133 : :
134 : : /*
135 : : * Comments attached to a range was imported without the range, check for the fieldmark start/end positions.
136 : : *
137 : : * oParas = ThisComponent.Text.createEnumeration
138 : : * oPara = oParas.nextElement
139 : : * oRuns = oPara.createEnumeration
140 : : * oRun = oRuns.nextElement
141 : : * oRun = oRuns.nextElement 'TextFieldStart
142 : : * oRun = oRuns.nextElement
143 : : * oRun = oRuns.nextElement 'TextFieldEnd
144 : : * xray oRun.TextPortionType
145 : : */
146 [ + - ]: 3 : uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
147 [ + - ][ + - ]: 3 : uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
[ + - ]
148 [ + - ][ + - ]: 3 : uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
149 [ + - ][ + - ]: 3 : uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY);
[ + - ]
150 [ + - ][ + - ]: 3 : uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration();
151 [ + - ][ + - ]: 3 : xRunEnum->nextElement();
152 [ + - ][ + - ]: 3 : uno::Reference<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY);
[ + - ]
153 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), getProperty<OUString>(xPropertySet, "TextPortionType"));
[ + - ][ + - ]
[ + - ][ + - ]
154 [ + - ][ + - ]: 3 : xRunEnum->nextElement();
155 [ + - ][ + - ]: 3 : xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY);
[ + - ]
156 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL(OUString("TextFieldEnd"), getProperty<OUString>(xPropertySet, "TextPortionType"));
[ + - ][ + - ]
[ + - ][ + - ]
157 : :
158 : : /*
159 : : * Initials were not imported.
160 : : *
161 : : * oFields = ThisComponent.TextFields.createEnumeration
162 : : * oField = oFields.nextElement
163 : : * xray oField.Initials
164 : : */
165 [ + - ]: 3 : uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
166 [ + - ][ + - ]: 3 : uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
167 [ + - ][ + - ]: 3 : uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
168 [ + - ][ + - ]: 3 : xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY);
[ + - ]
169 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty<OUString>(xPropertySet, "Initials"));
[ + - ][ + - ]
[ + - ][ + - ]
170 : :
171 : : /*
172 : : * There was a fake empty paragraph at the end of the comment text.
173 : : *
174 : : * oFields = ThisComponent.TextFields.createEnumeration
175 : : * oField = oFields.nextElement
176 : : * oParas = oField.TextRange.createEnumeration
177 : : * oPara = oParas.nextElement
178 : : * oPara = oParas.nextElement
179 : : */
180 : :
181 [ + - ][ + - ]: 3 : xParaEnumAccess.set(getProperty< uno::Reference<container::XEnumerationAccess> >(xPropertySet, "TextRange"), uno::UNO_QUERY);
182 [ + - ][ + - ]: 6 : xParaEnum = xParaEnumAccess->createEnumeration();
[ - + ][ + - ]
183 [ + - ][ + - ]: 3 : xParaEnum->nextElement();
184 : 3 : bool bCaught = false;
185 : : try
186 : : {
187 [ - + ][ + - ]: 3 : xParaEnum->nextElement();
188 : : }
189 [ + - ]: 3 : catch (container::NoSuchElementException&)
190 : : {
191 : 3 : bCaught = true;
192 : : }
193 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL(true, bCaught);
[ + - ][ + - ]
[ + - ]
194 : 3 : }
195 : :
196 : 3 : void Test::testMathEscape()
197 : : {
198 [ + - ]: 3 : roundtrip("math-escape.docx");
199 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL(OUString("\\{ left [ right ] left ( right ) \\}"), getFormula(getRun(getParagraph(1), 1)));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
200 : 3 : }
201 : :
202 : 3 : void Test::testFdo51034()
203 : : {
204 : : // The problem was that the 'l' param of the HYPERLINK field was parsed with = "#", not += "#".
205 [ + - ]: 3 : roundtrip("fdo51034.odt");
206 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL(OUString("http://Www.google.com/#a"), getProperty<OUString>(getRun(getParagraph(1), 1), "HyperLinkURL"));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
207 : 3 : }
208 : :
209 : : // Construct the expected formula from UTF8, as there may be such characters.
210 : : // Remove all spaces, as LO export/import may change that.
211 : : // Replace symbol - (i.e. U+2212) with ASCII - , LO does this change and it shouldn't matter.
212 : : #define CHECK_FORMULA( expected, actual ) \
213 : : CPPUNIT_ASSERT_EQUAL( \
214 : : OUString( expected, strlen( expected ), RTL_TEXTENCODING_UTF8 ) \
215 : : .replaceAll( " ", "" ).replaceAll( OUString( "−", strlen( "−" ), RTL_TEXTENCODING_UTF8 ), "-" ), \
216 : : OUString( actual ).replaceAll( " ", "" ).replaceAll( OUString( "−", strlen( "−" ), RTL_TEXTENCODING_UTF8 ), "-" ))
217 : :
218 : 3 : void Test::testMathAccents()
219 : : {
220 [ + - ]: 3 : roundtrip( "math-accents.docx" );
221 [ + - ][ + - ]: 6 : CHECK_FORMULA(
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
222 : : "acute {a} grave {a} check {a} breve {a} circle {a} widevec {a} widetilde {a}"
223 : : " widehat {a} dot {a} widevec {a} widevec {a} widetilde {a} underline {a}",
224 [ + - ]: 3 : getFormula( getRun( getParagraph( 1 ), 1 )));
225 : 3 : }
226 : :
227 : 3 : void Test::testMathD()
228 : : {
229 [ + - ]: 3 : roundtrip( "math-d.docx" );
230 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left (x mline y mline z right )", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
231 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left (1 right )", getFormula( getRun( getParagraph( 1 ), 2 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
232 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left [2 right ]", getFormula( getRun( getParagraph( 1 ), 3 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
233 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left ldbracket 3 right rdbracket", getFormula( getRun( getParagraph( 1 ), 4 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
234 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left lline 4 right rline", getFormula( getRun( getParagraph( 1 ), 5 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
235 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left ldline 5 right rdline", getFormula( getRun( getParagraph( 1 ), 6 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
236 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left langle 6 right rangle", getFormula( getRun( getParagraph( 1 ), 7 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
237 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left langle a mline b right rangle", getFormula( getRun( getParagraph( 1 ), 8 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
238 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left ({x} over {y} right )", getFormula( getRun( getParagraph( 1 ), 9 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
239 : 3 : }
240 : :
241 : 3 : void Test::testMathEscaping()
242 : : {
243 [ + - ]: 3 : roundtrip( "math-escaping.docx" );
244 [ + - ][ + - ]: 3 : CHECK_FORMULA( "− ∞ < x < ∞", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
245 : 3 : }
246 : :
247 : 3 : void Test::testMathLim()
248 : : {
249 [ + - ]: 3 : roundtrip( "math-lim.docx" );
250 [ + - ][ + - ]: 3 : CHECK_FORMULA( "lim from {x → 1} {x}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
251 : 3 : }
252 : :
253 : 3 : void Test::testMathMalformedXml()
254 : : {
255 [ + - ]: 3 : roundtrip( "math-malformed_xml.docx" );
256 [ + - ][ + - ]: 3 : CPPUNIT_ASSERT_EQUAL( 0, getLength());
[ + - ][ + - ]
[ + - ][ + - ]
257 : 3 : }
258 : :
259 : 3 : void Test::testMathMatrix()
260 : : {
261 [ + - ]: 3 : roundtrip( "math-matrix.docx" );
262 [ + - ][ + - ]: 3 : CHECK_FORMULA( "left [matrix {1 # 2 ## 3 # 4} right ]", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
263 : 3 : }
264 : :
265 : 3 : void Test::testMathMso2k7()
266 : : {
267 [ + - ]: 3 : roundtrip( "math-mso2k7.docx" );
268 [ + - ][ + - ]: 3 : CHECK_FORMULA( "A = π {r} ^ {2}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
269 : : // TODO check the stack/binom difference
270 : : // CHECK_FORMULA( "{left (x+a right )} ^ {n} = sum from {k=0} to {n} {left (binom {n} {k} right ) {x} ^ {k} {a} ^ {n-k}}",
271 [ + - ][ + - ]: 6 : CHECK_FORMULA( "{left (x+a right )} ^ {n} = sum from {k=0} to {n} {left (stack {n # k} right ) {x} ^ {k} {a} ^ {n-k}}",
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
272 [ + - ]: 3 : getFormula( getRun( getParagraph( 2 ), 1 )));
273 [ + - ][ + - ]: 6 : CHECK_FORMULA( "{left (1+x right )} ^ {n} =1+ {nx} over {1!} + {n left (n-1 right ) {x} ^ {2}} over {2!} +…",
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
274 [ + - ]: 3 : getFormula( getRun( getParagraph( 3 ), 1 )));
275 : : // TODO check (cos/sin miss {})
276 : : // CHECK_FORMULA( "f left (x right ) = {a} rsub {0} + sum from {n=1} to {∞} {left ({a} rsub {n} cos {{nπx} over {L}} + {b} rsub {n} sin {{nπx} over {L}} right )}",
277 [ + - ][ + - ]: 6 : CHECK_FORMULA( "f left (x right ) = {a} rsub {0} + sum from {n=1} to {∞} {left ({a} rsub {n} cos {nπx} over {L} + {b} rsub {n} sin {nπx} over {L} right )}",
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
278 [ + - ]: 3 : getFormula( getRun( getParagraph( 4 ), 1 )));
279 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{a} ^ {2} + {b} ^ {2} = {c} ^ {2}", getFormula( getRun( getParagraph( 5 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
280 [ + - ][ + - ]: 6 : CHECK_FORMULA( "x = {- b ± sqrt {{b} ^ {2} -4 ac}} over {2 a}",
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
281 [ + - ]: 3 : getFormula( getRun( getParagraph( 6 ), 1 )));
282 [ + - ][ + - ]: 6 : CHECK_FORMULA(
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
283 : : "{e} ^ {x} =1+ {x} over {1!} + {{x} ^ {2}} over {2!} + {{x} ^ {3}} over {3!} +…, -∞<x<∞",
284 [ + - ]: 3 : getFormula( getRun( getParagraph( 7 ), 1 )));
285 [ + - ][ + - ]: 6 : CHECK_FORMULA(
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
286 : : // "sin {α} ± sin {β} =2 sin {{1} over {2} left (α±β right )} cos {{1} over {2} left (α∓β right )}",
287 : : // TODO check (cos/in miss {})
288 : : "sin α ± sin β =2 sin {1} over {2} left (α±β right ) cos {1} over {2} left (α∓β right )",
289 [ + - ]: 3 : getFormula( getRun( getParagraph( 8 ), 1 )));
290 [ + - ][ + - ]: 6 : CHECK_FORMULA(
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
291 : : // "cos {α} + cos {β} =2 cos {{1} over {2} left (α+β right )} cos {{1} over {2} left (α-β right )}",
292 : : // TODO check (cos/sin miss {})
293 : : "cos α + cos β =2 cos {1} over {2} left (α+β right ) cos {1} over {2} left (α-β right )",
294 [ + - ]: 3 : getFormula( getRun( getParagraph( 9 ), 1 )));
295 : 3 : }
296 : :
297 : 3 : void Test::testMathNary()
298 : : {
299 [ + - ]: 3 : roundtrip( "math-nary.docx" );
300 [ + - ][ + - ]: 3 : CHECK_FORMULA( "lllint from {1} to {2} {x + 1}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
301 [ + - ][ + - ]: 3 : CHECK_FORMULA( "prod from {a} {b}", getFormula( getRun( getParagraph( 1 ), 2 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
302 [ + - ][ + - ]: 3 : CHECK_FORMULA( "sum to {2} {x}", getFormula( getRun( getParagraph( 1 ), 3 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
303 : 3 : }
304 : :
305 : 3 : void Test::testMathOverbraceUnderbrace()
306 : : {
307 [ + - ]: 3 : roundtrip( "math-overbrace_underbrace.docx" );
308 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{abcd} overbrace {4}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
309 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{xyz} underbrace {3}", getFormula( getRun( getParagraph( 2 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
310 : 3 : }
311 : :
312 : 3 : void Test::testMathOverstrike()
313 : : {
314 [ + - ]: 3 : roundtrip( "math-overstrike.docx" );
315 [ + - ][ + - ]: 3 : CHECK_FORMULA( "overstrike {abc}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
316 : 3 : }
317 : :
318 : 3 : void Test::testMathPlaceholders()
319 : : {
320 [ + - ]: 3 : roundtrip( "math-placeholders.docx" );
321 [ + - ][ + - ]: 3 : CHECK_FORMULA( "sum from <?> to <?> <?>", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
322 : 3 : }
323 : :
324 : 3 : void Test::testMathRad()
325 : : {
326 [ + - ]: 3 : roundtrip( "math-rad.docx" );
327 [ + - ][ + - ]: 3 : CHECK_FORMULA( "sqrt {4}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
328 [ + - ][ + - ]: 3 : CHECK_FORMULA( "nroot {3} {x + 1}", getFormula( getRun( getParagraph( 1 ), 2 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
329 : 3 : }
330 : :
331 : 3 : void Test::testMathSubscripts()
332 : : {
333 [ + - ]: 3 : roundtrip( "math-subscripts.docx" );
334 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{x} ^ {y} + {e} ^ {x}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
335 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{x} ^ {b}", getFormula( getRun( getParagraph( 1 ), 2 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
336 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{x} rsub {b}", getFormula( getRun( getParagraph( 1 ), 3 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
337 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{a} rsub {c} rsup {b}", getFormula( getRun( getParagraph( 1 ), 4 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
338 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{x} lsub {2} lsup {1}", getFormula( getRun( getParagraph( 1 ), 5 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
339 [ + - ][ + - ]: 6 : CHECK_FORMULA( "{{x csup {6} csub {3}} lsub {4} lsup {5}} rsub {2} rsup {1}",
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
340 [ + - ]: 3 : getFormula( getRun( getParagraph( 1 ), 6 )));
341 : 3 : }
342 : :
343 : 3 : void Test::testMathVerticalStacks()
344 : : {
345 [ + - ]: 3 : roundtrip( "math-vertical_stacks.docx" );
346 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{a} over {b}", getFormula( getRun( getParagraph( 1 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
347 [ + - ][ + - ]: 3 : CHECK_FORMULA( "{a} / {b}", getFormula( getRun( getParagraph( 2 ), 1 )));
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
348 : : // TODO check these
349 : : // CHECK_FORMULA( "binom {a} {b}", getFormula( getRun( getParagraph( 3 ), 1 )));
350 : : // CHECK_FORMULA( "binom {a} {binom {b} {c}}", getFormula( getRun( getParagraph( 4 ), 1 )));
351 : 3 : }
352 : :
353 : 3 : CPPUNIT_TEST_SUITE_REGISTRATION(Test);
354 : :
355 [ + - ][ + - ]: 12 : CPPUNIT_PLUGIN_IMPLEMENT();
[ + - ][ + - ]
[ + - ][ # # ]
356 : :
357 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|