Clover Coverage Report
Coverage timestamp: Fri Feb 14 2014 01:47:57 UTC
86   242   31   6.62
20   168   0.36   13
13     2.38  
1    
 
  Qedeq2UnicodeTextExecutorTest       Line # 42 86 31 79% 0.789916
 
  (9)
 
1    /* This file is part of the project "Hilbert II" - http://www.qedeq.org
2    *
3    * Copyright 2000-2014, Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10    * This program is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13    * GNU General Public License for more details.
14    */
15   
16    package org.qedeq.kernel.bo.service.unicode;
17   
18    import java.io.File;
19    import java.io.IOException;
20    import java.util.HashMap;
21    import java.util.Map;
22   
23    import org.qedeq.base.io.IoUtility;
24    import org.qedeq.base.io.Parameters;
25    import org.qedeq.base.io.UrlUtility;
26    import org.qedeq.base.trace.Trace;
27    import org.qedeq.kernel.bo.common.QedeqBo;
28    import org.qedeq.kernel.bo.module.InternalModuleServiceCall;
29    import org.qedeq.kernel.bo.module.KernelQedeqBo;
30    import org.qedeq.kernel.bo.test.QedeqBoTestCase;
31    import org.qedeq.kernel.se.common.DefaultModuleAddress;
32    import org.qedeq.kernel.se.common.ModuleAddress;
33    import org.qedeq.kernel.se.common.SourceFileExceptionList;
34    import org.qedeq.kernel.se.visitor.InterruptException;
35   
36    /**
37    * Test generating UTF-8 files for all known samples and scripts.
38    * LATER 20110215 m31: perhaps support more LaTeX commands for unicode generation
39    *
40    * @author Michael Meyling
41    */
 
42    public class Qedeq2UnicodeTextExecutorTest extends QedeqBoTestCase {
43   
44    /** This class. */
45    private static final Class CLASS = Qedeq2UnicodeTextExecutorTest.class;
46    private InternalModuleServiceCall call;
47   
 
48  9 toggle protected void tearDown() throws Exception {
49  9 endServiceCall(call);
50  9 super.tearDown();
51    }
52   
 
53  1 toggle public void testGeneration1() throws Exception {
54  1 try {
55  1 generate(getDocDir(), "math/qedeq_logic_v1.xml", false);
56    } catch (SourceFileExceptionList e) {
57  0 assertEquals(4, e.size());
58    }
59    }
60   
 
61  1 toggle public void testGeneration1b() throws Exception {
62  1 generate(getDocDir(), "math/qedeq_formal_logic_v1.xml", false);
63    }
64   
 
65  1 toggle public void testGeneration2() throws Exception {
66  1 try {
67  1 generate(getDocDir(), "sample/qedeq_sample1.xml", false);
68    } catch (SourceFileExceptionList e) {
69  0 assertEquals(4, e.size());
70    }
71    }
72   
 
73  1 toggle public void testGeneration3() throws Exception {
74  1 generate(getDocDir(), "sample/qedeq_sample2.xml", false);
75    }
76   
 
77  1 toggle public void testGeneration3b() throws Exception {
78  1 generate(getDocDir(), "sample/qedeq_sample3.xml", false);
79    }
80   
 
81  1 toggle public void testGeneration3c() throws Exception {
82  1 generate(getDocDir(), "sample/qedeq_sample4.xml", false);
83    }
84   
 
85  1 toggle public void testGeneration4() throws Exception {
86  1 generate(getDocDir(), "math/qedeq_set_theory_v1.xml", false);
87    }
88   
 
89  1 toggle public void testGeneration5() throws Exception {
90  1 try {
91  1 generate(getDocDir(), "project/qedeq_basic_concept.xml", false);
92    } catch (SourceFileExceptionList e) {
93  0 assertEquals(14, e.size());
94    }
95    }
96   
 
97  1 toggle public void testGeneration6() throws Exception {
98  1 try {
99  1 generate(getDocDir(), "project/qedeq_logic_language.xml", true);
100    } catch (SourceFileExceptionList e) {
101    // System.out.println(e);
102  0 assertEquals(8, e.size());
103    }
104    }
105   
106    /**
107    * Call the generation of one UTF-8 file and copy XML source to same destination directory for
108    * all supported languages.
109    *
110    * @param dir Start directory.
111    * @param xml Relative path to XML file. Must not be <code>null</code>.
112    * @param onlyEn Generate only for language "en".
113    * @throws Exception Failure.
114    */
 
115  9 toggle public void generate(final File dir, final String xml, final boolean onlyEn) throws Exception {
116  9 final File destinationDirectory = new File(getGenDir(), "doc");
117  9 final SourceFileExceptionList sfe = new SourceFileExceptionList();
118  9 try {
119  9 generate(dir, xml, "en", destinationDirectory);
120    } catch (SourceFileExceptionList e) {
121  0 sfe.add(e);
122    }
123  9 if (!onlyEn) {
124  8 try {
125  8 generate(dir, xml, "de", destinationDirectory);
126    } catch (SourceFileExceptionList e) {
127  0 sfe.add(e);
128    }
129    } else {
130  1 try {
131  1 generate(dir, xml, "xx", destinationDirectory);
132    } catch (SourceFileExceptionList e) {
133  0 sfe.add(e);
134    }
135    }
136  9 if (sfe.size() > 0) {
137  0 throw sfe;
138    }
139    }
140   
141    /**
142    * Call the generation of one UTF-8 file and copy XML source to same destination directory.
143    *
144    * @param dir Start directory.
145    * @param xml Relative path to XML file. Must not be <code>null</code>.
146    * @param language Generate text in this language. Can be <code>null</code>.
147    * @param destinationDirectory Directory path for LaTeX file. Must not be <code>null</code>.
148    */
 
149  18 toggle public void generate(final File dir, final String xml, final String language,
150    final File destinationDirectory) throws IOException, SourceFileExceptionList, InterruptException {
151  18 final File xmlFile = new File(dir, xml);
152  18 final ModuleAddress address = getServices().getModuleAddress(
153    UrlUtility.toUrl(xmlFile));
154  18 final KernelQedeqBo prop = (KernelQedeqBo) getServices().loadModule(
155    address);
156  18 if (prop.hasErrors()) {
157  0 throw prop.getErrors();
158    }
159  18 getServices().loadRequiredModules(prop.getModuleAddress());
160  18 if (prop.hasErrors()) {
161  0 throw prop.getErrors();
162    }
163  18 getServices().checkWellFormedness(prop.getModuleAddress());
164  18 if (prop.hasErrors()) {
165  0 throw prop.getErrors();
166    }
167  18 if (prop.hasErrors()) {
168  0 throw prop.getErrors();
169    }
170   
171  18 final String web = "http://www.qedeq.org/"
172  18 + getInternalServices().getKernelVersionDirectory() + (!xml.startsWith("sample") ? "/doc/" : "/") + xml;
173  18 final ModuleAddress webAddress = new DefaultModuleAddress(web);
174  18 getInternalServices().getLocalFilePath(webAddress);
175  18 IoUtility.copyFile(xmlFile, getInternalServices().getLocalFilePath(webAddress));
176   
177  18 getServices().checkWellFormedness(webAddress);
178  18 final QedeqBo webBo = getServices().getQedeqBo(webAddress);
179  18 final File utfFile = new File(destinationDirectory, xml.substring(0, xml.lastIndexOf('.'))
180    + "_" + language + ".utf8");
181  18 System.out.println(utfFile);
182  18 generate((KernelQedeqBo) webBo, utfFile, language, "1", false);
183  18 final File utfFileB = new File(destinationDirectory, xml.substring(0, xml.lastIndexOf('.'))
184    + "_" + language + ".b.utf8");
185  18 System.out.println(utfFileB);
186  18 generate((KernelQedeqBo) webBo, utfFileB , language, "1", true);
187    // final File utfCopy = new File(dir, new File(new File(xml).getParent(), utfFile.getName())
188    // .getPath());
189    // IoUtility.copyFile(utfFile, utfCopy);
190  18 final File xmlCopy = new File(destinationDirectory, xml);
191  18 IoUtility.copyFile(xmlFile, xmlCopy);
192  18 if (webBo.hasErrors()) {
193  0 throw webBo.getErrors();
194    }
195  18 if (webBo.hasWarnings()) {
196  0 throw webBo.getWarnings();
197    }
198    }
199   
200    /**
201    * Generate LaTeX file out of XML file.
202    *
203    * @param prop Take this QEDEQ module.
204    * @param to Write to this file. Could be <code>null</code>.
205    * @param language Resulting language. Could be <code>null</code>.
206    * @param level Resulting detail level. Could be <code>null</code>.
207    * @param brief Only brief node output.
208    * @return File name of generated LaTeX file.
209    * @throws SourceFileExceptionList Something went wrong.
210    */
 
211  36 toggle public String generate(final KernelQedeqBo prop, final File to, final String language,
212    final String level, final boolean brief) throws SourceFileExceptionList, InterruptException {
213  36 final String method = "generate(String, String, String, String)";
214  36 try {
215  36 Trace.begin(CLASS, method);
216  36 Trace.param(CLASS, method, "prop", prop);
217  36 Trace.param(CLASS, method, "to", to);
218  36 Trace.param(CLASS, method, "language", language);
219  36 Trace.param(CLASS, method, "level", level);
220  36 final Map parameters = new HashMap();
221  36 parameters.put("info", "false");
222  36 parameters.put("brief", Boolean.toString(brief));
223  36 parameters.put("maximumColumn", "80");
224  36 call = createServiceCall("generate utf8", prop);
225  36 final String source =(new Qedeq2UnicodeTextExecutor(new Qedeq2Utf8Plugin(), prop, new Parameters(parameters)))
226    .generateUtf8(call.getInternalServiceProcess(), language, "1");
227  36 if (to != null) {
228  36 IoUtility.createNecessaryDirectories(to);
229  36 IoUtility.saveFile(to, source, "UTF-8");
230  36 return to.getCanonicalPath();
231    }
232  0 return prop.getName();
233    } catch (IOException e) {
234  0 Trace.trace(CLASS, method, e);
235  0 throw new RuntimeException(e);
236    } finally {
237  36 endServiceCall(call);
238  36 Trace.end(CLASS, method);
239    }
240    }
241   
242    }