Clover Coverage Report
Coverage timestamp: Fri May 24 2013 13:47:27 UTC
81   232   30   6.23
20   161   0.37   13
13     2.31  
1    
 
  GenerateUtf8Test       Line # 42 81 30 87.7% 0.877193
 
  (9)
 
1    /* This file is part of the project "Hilbert II" - http://www.qedeq.org
2    *
3    * Copyright 2000-2013, 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.InternalServiceCall;
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 GenerateUtf8Test extends QedeqBoTestCase {
43   
44    /** This class. */
45    private static final Class CLASS = GenerateUtf8Test.class;
46    private InternalServiceCall 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", getGenDir(), false);
56    } catch (SourceFileExceptionList e) {
57  1 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", getGenDir(), false);
63    }
64   
 
65  1 toggle public void testGeneration2() throws Exception {
66  1 try {
67  1 generate(getDocDir(), "sample/qedeq_sample1.xml", getGenDir(), false);
68    } catch (SourceFileExceptionList e) {
69  1 assertEquals(4, e.size());
70    }
71    }
72   
 
73  1 toggle public void testGeneration3() throws Exception {
74  1 generate(getDocDir(), "sample/qedeq_sample2.xml", getGenDir(), false);
75    }
76   
 
77  1 toggle public void testGeneration3b() throws Exception {
78  1 generate(getDocDir(), "sample/qedeq_sample3.xml", getGenDir(), false);
79    }
80   
 
81  1 toggle public void testGeneration3c() throws Exception {
82  1 generate(getDocDir(), "sample/qedeq_sample4.xml", getGenDir(), false);
83    }
84   
 
85  1 toggle public void testGeneration4() throws Exception {
86  1 generate(getDocDir(), "math/qedeq_set_theory_v1.xml", getGenDir(), false);
87    }
88   
 
89  1 toggle public void testGeneration5() throws Exception {
90  1 try {
91  1 generate(getDocDir(), "project/qedeq_basic_concept.xml", getGenDir(), false);
92    } catch (SourceFileExceptionList e) {
93  1 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", getGenDir(), true);
100    } catch (SourceFileExceptionList e) {
101    // System.out.println(e);
102  1 assertEquals(8, e.size());
103    }
104    }
105   
106    /**
107    * Call the generation of one LaTeX 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 destinationDirectory Directory path for LaTeX file. Must not be <code>null</code>.
113    * @param onlyEn Generate only for language "en".
114    * @throws Exception Failure.
115    */
 
116  9 toggle public void generate(final File dir, final String xml, final File destinationDirectory,
117    final boolean onlyEn) throws Exception {
118  9 final SourceFileExceptionList sfe = new SourceFileExceptionList();
119  9 try {
120  9 generate(dir, xml, "en", destinationDirectory);
121    } catch (SourceFileExceptionList e) {
122  4 sfe.add(e);
123    }
124  9 if (!onlyEn) {
125  8 try {
126  8 generate(dir, xml, "de", destinationDirectory);
127    } catch (SourceFileExceptionList e) {
128  3 sfe.add(e);
129    }
130    }
131  9 if (sfe.size() > 0) {
132  4 throw sfe;
133    }
134    }
135   
136    /**
137    * Call the generation of one UTF-8 file and copy XML source to same destination directory.
138    *
139    * @param dir Start directory.
140    * @param xml Relative path to XML file. Must not be <code>null</code>.
141    * @param language Generate text in this language. Can be <code>null</code>.
142    * @param destinationDirectory Directory path for LaTeX file. Must not be <code>null</code>.
143    */
 
144  17 toggle public void generate(final File dir, final String xml, final String language,
145    final File destinationDirectory) throws IOException, SourceFileExceptionList, InterruptException {
146  17 final File xmlFile = new File(dir, xml);
147  17 final ModuleAddress address = getServices().getModuleAddress(
148    UrlUtility.toUrl(xmlFile));
149  17 final KernelQedeqBo prop = (KernelQedeqBo) getServices().loadModule(
150    address);
151  17 if (prop.hasErrors()) {
152  0 throw prop.getErrors();
153    }
154  17 getServices().loadRequiredModules(prop.getModuleAddress());
155  17 if (prop.hasErrors()) {
156  0 throw prop.getErrors();
157    }
158  17 getServices().checkWellFormedness(prop.getModuleAddress());
159  17 if (prop.hasErrors()) {
160  0 throw prop.getErrors();
161    }
162  17 if (prop.hasErrors()) {
163  0 throw prop.getErrors();
164    }
165   
166  17 final String web = "http://www.qedeq.org/"
167  17 + getInternalServices().getKernelVersionDirectory() + (!xml.startsWith("sample") ? "/doc/" : "/") + xml;
168  17 final ModuleAddress webAddress = new DefaultModuleAddress(web);
169  17 getInternalServices().getLocalFilePath(webAddress);
170  17 IoUtility.copyFile(xmlFile, getInternalServices().getLocalFilePath(webAddress));
171   
172  17 getServices().checkWellFormedness(webAddress);
173  17 final QedeqBo webBo = getServices().getQedeqBo(webAddress);
174  17 final File texFile = new File(destinationDirectory, xml.substring(0, xml.lastIndexOf('.'))
175    + "_" + language + ".txt");
176  17 generate((KernelQedeqBo) webBo, texFile, language, "1");
177  17 final File texCopy = new File(dir, new File(new File(xml).getParent(), texFile.getName())
178    .getPath());
179  17 final File xmlCopy = new File(destinationDirectory, xml);
180  17 IoUtility.createNecessaryDirectories(xmlCopy);
181  17 IoUtility.copyFile(xmlFile, xmlCopy);
182  17 IoUtility.copyFile(texFile, texCopy);
183  17 if (webBo.hasErrors()) {
184  0 throw webBo.getErrors();
185    }
186  17 if (webBo.hasWarnings()) {
187  7 throw webBo.getWarnings();
188    }
189    }
190   
191    /**
192    * Generate LaTeX file out of XML file.
193    *
194    * @param prop Take this QEDEQ module.
195    * @param to Write to this file. Could be <code>null</code>.
196    * @param language Resulting language. Could be <code>null</code>.
197    * @param level Resulting detail level. Could be <code>null</code>.
198    * @return File name of generated LaTeX file.
199    * @throws SourceFileExceptionList Something went wrong.
200    */
 
201  17 toggle public String generate(final KernelQedeqBo prop, final File to, final String language,
202    final String level) throws SourceFileExceptionList, InterruptException {
203  17 final String method = "generate(String, String, String, String)";
204  17 try {
205  17 Trace.begin(CLASS, method);
206  17 Trace.param(CLASS, method, "prop", prop);
207  17 Trace.param(CLASS, method, "to", to);
208  17 Trace.param(CLASS, method, "language", language);
209  17 Trace.param(CLASS, method, "level", level);
210  17 final Map parameters = new HashMap();
211  17 parameters.put("info", "true");
212  17 parameters.put("brief", "false");
213  17 parameters.put("maximumColumn", "80");
214  17 call = createServiceCall("generate latex", prop);
215  17 final String source =(new Qedeq2Utf8Executor(new Qedeq2Utf8Plugin(), prop, new Parameters(parameters)))
216    .generateUtf8(call.getInternalServiceProcess(), language, "1");
217  17 if (to != null) {
218  17 IoUtility.createNecessaryDirectories(to);
219  17 IoUtility.copyFile(new File(source), to);
220  17 return to.getCanonicalPath();
221    }
222  0 return prop.getName();
223    } catch (IOException e) {
224  0 Trace.trace(CLASS, method, e);
225  0 throw new RuntimeException(e);
226    } finally {
227  17 endServiceCall(call);
228  17 Trace.end(CLASS, method);
229    }
230    }
231   
232    }