package se.cambio.cds.gdl.parser;
import junit.framework.TestCase;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import se.cambio.cds.gdl.model.Guide;
import se.cambio.cds.gdl.model.Rule;
import se.cambio.cds.gdl.model.TranslationDetails;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class GDLOutputTest extends TestCase {
public void setUp() {
parser = new GDLParser();
serializer = new DADLSerializer();
}
public void tearDown() {
guide = null;
}
public void testParseSimpleGDL() throws Exception {
parse("test001.dadl");
List<String> list = serializer.toDADL(guide);
//write(list, "output.dadl");
}
public void testOutputEmptyMap() throws Exception {
parse("test001.dadl");
guide.getLanguage().setTranslations(new HashMap<String,TranslationDetails>());
List<String> list = serializer.toDADL(guide);
//write(list, "output2.dadl");
Guide actual = parse(list);
guide.getLanguage().setTranslations(null);
assertEquals(guide, actual);
}
public void testRoundTrip() throws Exception {
parse("test001.dadl");
List<String> list = serializer.toDADL(guide);
//write(list, "after_parse.dadl");
StringBuffer buf = new StringBuffer();
for(String s : list) {
buf.append(s);
}
Reader reader = convert(buf.toString());
Guide after = parser.parse(reader);
list = serializer.toDADL(after);
//write(list, "after_round_trip.dadl");
assertEquals(guide, after);
}
public void testRuleHasRightOrder() throws Exception {
Rule rule = new Rule();
rule.setId("gt0001");
List<String> list = new ArrayList<String>();
list.add("when1");
rule.setWhen(list);
list = new ArrayList<String>();
list.add("then1");
rule.setThen(list);
list = serializer.toDADL(rule);
assertEquals(5, list.size());
assertTrue(list.get(1).trim().startsWith("when"));
assertTrue(list.get(2).trim().startsWith("then"));
}
public void testRoundTripDate() throws Exception {
roundTrip("test_date.gdl");
}
public void testRoundTripText() throws Exception {
roundTrip("test_text.gdl");
}
public void testRoundTripNegativeNumber() throws Exception {
roundTrip("test_negative_number.gdl");
}
public static void roundTrip(String guideFilename) throws Exception {
InputStream is = load(guideFilename);
InputStreamReader in = new InputStreamReader(is, "UTF-8");
String str1 = IOUtils.toString(in).replaceAll("\\r\\n", "\n");
GDLParser parser = new GDLParser();
Guide guide = parser.parse(new ByteArrayInputStream(str1.getBytes()));
StringBuffer sb = new StringBuffer();
DADLSerializer serializer = new DADLSerializer();
for (String line : serializer.toDADL(guide)) {
sb.append(line+"\n");
}
String str2 = sb.toString();
assertEquals(str1, str2);
}
private Guide parse(List<String> lines) throws Exception {
StringBuffer buf = new StringBuffer();
for(String s : lines) {
buf.append(s);
}
return parser.parse(convert(buf.toString()));
}
private static Reader convert(String value) throws Exception {
return new StringReader(value);
}
private void parse(String input) throws Exception {
guide = parser.parse(load(input));
}
private static InputStream load(String name) throws Exception {
return GDLOutputTest.class.getClassLoader().getResourceAsStream(name);
}
private void write(List<String> lines, String file) throws Exception {
FileUtils.writeLines(new File(file), lines);
}
private GDLParser parser;
private Guide guide;
private DADLSerializer serializer;
}
/*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 2.0/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 2.0 (the 'License'); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an 'AS IS' basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
*
* The Initial Developers of the Original Code are Iago Corbal and Rong Chen.
* Portions created by the Initial Developer are Copyright (C) 2012-2013
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Software distributed under the License is distributed on an 'AS IS' basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* ***** END LICENSE BLOCK *****
*/