package org.moxie.tests;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import org.junit.Assert;
import org.junit.Test;
import org.moxie.maxml.Maxml;
import org.moxie.maxml.MaxmlException;
import org.moxie.maxml.MaxmlMap;
import org.moxie.maxml.MaxmlParser;
import org.moxie.utils.FileUtils;
/**
* Unit tests for the Maxml parser.
*
* @author James Moger
*
*/
public class TestMaxmlParser extends Assert {
String config = "name: Moxie\ndescription: Project Build Toolkit\nversion: 0.1.0\nurl: http://github.com/gitblit/moxie\nartifactId: moxie\nvendor: James Moger\nconfigureEclipseClasspath: true\nsourceDirectories: [core, maxjar, maxdoc]\nmap: { \na1: 12\na2: 3.14f\na3 : {\nb1:100l\nb2 : {\nc1:6.023d\nc2:c2value\n}\nb3:b3value\n}\na4: a4value\n}\noutputFolder: bin\nmavenUrls: [mavencentral]\ndependencyFolder: ext\ndependencies:\n - [ant, 1.7.0, org/apache/ant]\n - [markdownpapers-core, 1.2.5, org/tautua/markdownpapers]\nsimpledate:2003-07-04\ncanonical:2001-07-04T16:08:56.235Z\niso8601:2002-07-04T12:08:56.235-0400\ndevelopers :\n- {\n id: james\n name : James Moger\n url : https://plus.google.com/u/0/116428776452027956920\n roles : developer\n }\n- {\n id: james\n name : James Moger\n url : https://plus.google.com/u/0/116428776452027956920\n roles : developer\n }";
String blockTest = "name: Moxie\ndescription: \"\"\"\nMoxie\nis a\nJava Project Build Toolkit\n\"\"\"\nversion: 0.1.0";
String blockTest2 = "name: Moxie\ndescription:\n\"\"\nMoxie\n is a\n Java Project Build Toolkit\"\"\nversion: 0.1.0";
String blockTest3 = "name: Moxie\ndescription: \"\"\n Moxie\n is a\n Java Project Build Toolkit\n \"\"\nversion: 0.1.0";
String inlineMap = "{ id: myproxy, active: true, protocol: http, host:proxy.somewhere.com, port:8080, username: proxyuser, password: somepassword }";
String inlineMap2 = "{ id: central, url: \"http://repo1.apache.org/maven\", url2: \"http://repo1.apache.org/maven\", affinity: [ 'org.moxie' ] }";
String maplist = "developers :\n- {\n id: james\n name : James Moger\n url : https://plus.google.com/u/0/116428776452027956920\n roles : developer\n }";
String references = "colors1:\n- blue\n- purple\n- green\n\ncolors2:\n- red\n-yellow\n- orange\n\nall:\n+ &colors1\n+ &colors2\n- magenta\nmycolor: &colors2[1]";
String references2 = "1.2.3:\n- blue\n- purple\n- green\n\n4.5.6:\n- red\n-yellow\n- orange\n\nall:\n+ &'1.2.3'\n+ &'4.5.6'\n- magenta\nmycolor: &'4.5.6'[1]";
String references3 = "project.version.r1: {\n version: 1\n }\nproject.version.r2: {\n version: 2\n }\nversions: &'project.version.r'[1..2]";
@SuppressWarnings("rawtypes")
@Test
public void testValueParsing() throws Exception {
MaxmlParser parser = new MaxmlParser();
// strings
assertEquals("string", parser.parseValue("string"));
assertEquals("string", parser.parseValue("'string'"));
assertEquals("string", parser.parseValue("\"string\""));
assertEquals("Moxie\nis a\nJava Project Build Toolkit\n", Maxml.parse(blockTest).get("description"));
assertEquals("Moxie\n is a\n Java Project Build Toolkit", Maxml.parse(blockTest2).get("description"));
assertEquals("Moxie\n is a\n Java Project Build Toolkit\n", Maxml.parse(blockTest3).get("description"));
assertEquals("[blue, purple, green, red, yellow, orange, magenta]", Maxml.parse(references).get("all").toString());
assertEquals("yellow", Maxml.parse(references).get("mycolor").toString());
assertEquals("[blue, purple, green, red, yellow, orange, magenta]", Maxml.parse(references2).get("all").toString());
assertEquals("yellow", Maxml.parse(references2).get("mycolor").toString());
assertEquals("[{version=1}, {version=2}]", Maxml.parse(references3).get("versions").toString());
// numerics
assertEquals(101, parser.parseValue("101"));
assertEquals(8, parser.parseValue("0x8"));
assertEquals(8, parser.parseValue("010"));
assertEquals(3405691582L, parser.parseValue("0xcafebabe"));
assertEquals(3405691582L, parser.parseValue("#cafebabe"));
assertEquals(1101, parser.parseValue("1,101"));
assertEquals(1101202, parser.parseValue("1,101,202"));
assertEquals(4000000000L, parser.parseValue("4000000000"));
assertEquals(4000000000L, parser.parseValue("4,000,000,000"));
assertEquals(2.3f, parser.parseValue("2.3"));
assertEquals(6.0E23f, parser.parseValue("6.0E+23"));
assertEquals(6.0E56d, parser.parseValue("6.0E+56"));
// booleans
assertEquals(true, parser.parseValue("true"));
assertEquals(true, parser.parseValue("yes"));
assertEquals(true, parser.parseValue("on"));
assertEquals(false, parser.parseValue("false"));
assertEquals(false, parser.parseValue("no"));
assertEquals(false, parser.parseValue("off"));
// null
assertNull(parser.parseValue("~"));
// inline lists
assertEquals("[a, b, c]", parser.parseValue("[a, b, c]").toString());
assertEquals("[a, b, c]", parser.parseValue("['a', 'b', 'c']")
.toString());
assertEquals("[a, b, c]", parser.parseValue("[\"a\", \"b\", \"c\"]")
.toString());
assertEquals(3, ((List) parser.parseValue("[a, b, c]")).size());
assertEquals(3,
((List) parser.parseValue("[a, \"b, or beta\", c]")).size());
// inline map
assertEquals(7, ((MaxmlMap) parser.parseValue(inlineMap)).size());
assertEquals(4, ((MaxmlMap) parser.parseValue(inlineMap2)).size());
assertEquals("[org.moxie]", ((MaxmlMap) parser.parseValue(inlineMap2)).getList("affinity", null).toString());
// dates
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
assertEquals("2003-07-04",
df.format(((Date) parser.parseValue("2003-07-04"))));
df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
assertEquals("2003-07-04T15:15:15Z",
df.format(((Date) parser.parseValue("2003-07-04T15:15:15Z"))));
df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
df.setTimeZone(TimeZone.getTimeZone("America/New_York"));
assertEquals("2003-07-04T15:15:15-0400", df.format(((Date) parser
.parseValue("2003-07-04T15:15:15-0400"))));
}
@SuppressWarnings("rawtypes")
@Test
public void testParse() throws MaxmlException {
Map<String, Object> map = Maxml.parse(config);
assertTrue(map.size() > 0);
assertTrue(map.containsKey("name"));
assertEquals("Moxie", map.get("name"));
assertEquals(3, ((List) map.get("sourcedirectories")).size());
assertEquals(2, ((List) map.get("dependencies")).size());
assertEquals(4, ((Map) map.get("map")).size());
}
@SuppressWarnings("rawtypes")
@Test
public void testParseFile() throws MaxmlException {
String content = FileUtils.readContent(new File("build.moxie"), "\n");
Map<String, Object> map = Maxml.parse(content);
assertTrue(map.size() > 0);
assertTrue(map.containsKey("name"));
assertEquals("Moxie-Maxml", map.get("name"));
assertEquals(2, ((List) map.get("sourcedirectories")).size());
assertEquals(2, ((List) map.get("dependencies")).size());
}
@Test
public void testInstantiation() throws MaxmlException {
TestObject test = Maxml.parse(config, TestObject.class);
assertNotNull(test);
assertEquals("Moxie", test.name);
assertEquals(3, test.sourceDirectories.size());
assertEquals(2, test.dependencies.size());
assertEquals(4, test.map.size());
assertEquals(2, test.developers.size());
}
public static class TestObject {
public String name;
public String description;
public String version;
public String url;
public String artifactId;
public String vendor;
public boolean configureEclipseClasspath;
public List<String> sourceDirectories;
public String outputFolder;
public Map<String, Object> map;
public List<String> mavenUrls;
public String dependencyFolder;
public List<List<String>> dependencies;
public Date canonical;
public Date iso8601;
public Date simpleDate;
public List<Map<String, Object>> developers;
}
}