From 2a8f96d7dcce83d79f94931508b0dc2a7b53dd46 Mon Sep 17 00:00:00 2001 From: "Meredith L. Patterson" <mlp@thesmartpolitenerd.com> Date: Wed, 1 Jan 2014 21:28:20 +0100 Subject: [PATCH] configuring java test generation --- .gitmodules | 3 ++ lib/tsgenjava.pl | 53 +++++++++++-------- lib/{testgen.pl => tsparser.pl} | 0 src/bindings/haskell | 1 + src/bindings/java/SConscript | 5 +- .../com/upstandinghackers/hammer/Hammer.java | 8 +-- .../com/upstandinghackers/hammer/Parser.java | 6 +++ 7 files changed, 48 insertions(+), 28 deletions(-) create mode 100644 .gitmodules rename lib/{testgen.pl => tsparser.pl} (100%) create mode 160000 src/bindings/haskell diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..11288e0e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/bindings/haskell"] + path = src/bindings/haskell + url = git://gitorious.org/hhammer/hhammer.git diff --git a/lib/tsgenjava.pl b/lib/tsgenjava.pl index 5773e610..7d6a8cee 100644 --- a/lib/tsgenjava.pl +++ b/lib/tsgenjava.pl @@ -15,10 +15,20 @@ % TODO: build a Box-like pretty-printer +% ch_range should become chRange +underscore_to_camel([0'_, X|Xs], [Xp|Xsp]) :- !, + code_type(Xp, to_upper(X)), + underscore_to_camel(Xs,Xsp). +underscore_to_camel([X|Xs],[X|Xsp]) :- !, + underscore_to_camel(Xs,Xsp). +underscore_to_camel([],[]) :- !. + format_parser_name(Name, Result) :- - atom_codes(Name, [CInit|CName]), - code_type(RInit, to_upper(CInit)), - append("Hammer.", [RInit|CName], Result), !. + atom_codes(Name, CName), + ( member(0'_, CName) -> + underscore_to_camel(CName, Result0); + CName = Result0), + append("Hammer.", Result0, Result), !. format_test_name(Name, Result) :- atom_codes(Name, [CInit|CName]), @@ -99,16 +109,16 @@ pp_parser(A) --> pp_test_elem(decl, parser(_)) --> !. pp_test_elem(init, parser(_)) --> !. pp_test_elem(exec, parser(P)) --> - !, indent(3), + !, indent(2), "parser = ", pp_parser(P), ";\n". pp_test_elem(decl, subparser(Name,_)) --> - !, indent(3), + !, indent(2), "IndirectParser ", pp_parser(ref(Name)), " = Hammer.Indirect();\n". pp_test_elem(init, subparser(Name, Parser)) --> - !, indent(3), + !, indent(2), pp_parser(ref(Name)), ".Bind(", pp_parser(Parser), ");\n". @@ -118,15 +128,15 @@ pp_test_elem(init, test(_,_)) --> !. pp_test_elem(decl, testFail(_)) --> !. pp_test_elem(init, testFail(_)) --> !. pp_test_elem(exec, test(Str, Result)) --> - !, indent(3), - " CheckParseOK(parser, ", pp_parser(string(Str)), - ", ", + !, indent(2), + "Assert.assertEquals(parser.parse(", pp_parser(string(Str)), + "), ", pp_parse_result(Result), ");\n". pp_test_elem(exec, testFail(Str)) --> - !, indent(3), - " CheckParseFail(parser, ", pp_parser(string(Str)), - ");\n". + !, indent(2), + "Assert.assertNull(parser.parse(", pp_parser(string(Str)), + "));\n". % pp_test_elem(_, _) --> !. @@ -151,7 +161,7 @@ pp_byte_seq_r([X|Xs]) --> !, pp_byte_seq_r(Xs). pp_parse_result(char(C)) --> !, - "(System.UInt64)", + "(byte)", pp_parser(char(C)). pp_parse_result(seq(Args)) --> !, "new object[]{ ", pp_result_seq(Args), "}". @@ -178,14 +188,14 @@ pp_test_elems(Phase, [X|Xs]) --> pp_test_case(testcase(Name, Elems)) --> !, - indent(2), "[Test]\n", + indent(1), "@Test\n", { format_test_name(Name, TName) }, - indent(2), "public void ", TName, "() {\n", - indent(3), "Parser parser;\n", + indent(1), "public void ", TName, "() {\n", + indent(2), "Parser parser;\n", pp_test_elems(decl, Elems), pp_test_elems(init, Elems), pp_test_elems(exec, Elems), - indent(2), "}\n". + indent(1), "}\n". pp_test_cases([]) --> !. @@ -194,13 +204,10 @@ pp_test_cases([A|As]) --> pp_test_cases(As). pp_test_suite(Suite) --> - "namespace Hammer.Test {\n", - indent(1), "using NUnit.Framework;\n", - %indent(1), "using Hammer;\n", - indent(1), "[TestFixture]\n", - indent(1), "public partial class HammerTest {\n", + "package com.upstandinghackers.hammer; \n\n", + "import org.testng.annotations.*;\n\n", + "public class HammerTest {\n", pp_test_cases(Suite), - indent(1), "}\n", "}\n". gen_ts(Foo,Str) :- diff --git a/lib/testgen.pl b/lib/tsparser.pl similarity index 100% rename from lib/testgen.pl rename to lib/tsparser.pl diff --git a/src/bindings/haskell b/src/bindings/haskell new file mode 160000 index 00000000..332e242d --- /dev/null +++ b/src/bindings/haskell @@ -0,0 +1 @@ +Subproject commit 332e242d6314d1a5b8aee7bde47dd4c080f9b4e6 diff --git a/src/bindings/java/SConscript b/src/bindings/java/SConscript index 4690f501..26444c99 100644 --- a/src/bindings/java/SConscript +++ b/src/bindings/java/SConscript @@ -21,4 +21,7 @@ jni_headers = javaenv.JavaH(target = 'csrc', source = classes) native_src = PrependDir('csrc', csources) libhammer_java = javaenv.SharedLibrary('libjhammer', native_src, LIBS=['hammer'], LIBPATH='../../') hammer_jar = javaenv.Jar('hammer.jar', 'classes') -Default(libhammer_java, hammer_jar) \ No newline at end of file +Default(libhammer_java, hammer_jar) + +javatestenv = javaenv.Clone() +javatestenv['ENV']['LD_LIBRARY_PATH'] = os.path.dirname(str(libhammer_shared[0])) diff --git a/src/bindings/java/jsrc/com/upstandinghackers/hammer/Hammer.java b/src/bindings/java/jsrc/com/upstandinghackers/hammer/Hammer.java index 3e06a91e..4661e943 100644 --- a/src/bindings/java/jsrc/com/upstandinghackers/hammer/Hammer.java +++ b/src/bindings/java/jsrc/com/upstandinghackers/hammer/Hammer.java @@ -43,10 +43,10 @@ public class Hammer public static native Parser int32(); public static native Parser int16(); public static native Parser int8(); - public static native Parser uInt64(); - public static native Parser uInt32(); - public static native Parser uInt16(); - public static native Parser uInt8(); + public static native Parser uint64(); + public static native Parser uint32(); + public static native Parser uint16(); + public static native Parser uint8(); public static native Parser whitespace(Parser p); public static native Parser left(Parser p, Parser q); public static native Parser right(Parser p, Parser q); diff --git a/src/bindings/java/jsrc/com/upstandinghackers/hammer/Parser.java b/src/bindings/java/jsrc/com/upstandinghackers/hammer/Parser.java index 2e924cb2..eb5f89bb 100644 --- a/src/bindings/java/jsrc/com/upstandinghackers/hammer/Parser.java +++ b/src/bindings/java/jsrc/com/upstandinghackers/hammer/Parser.java @@ -5,6 +5,12 @@ public class Parser public native void bindIndirect(Parser inner); public native void free(); public long getInner() {return this.inner;} + public ParseResult parse(String input) { + return Hammer.parse(this, input.getBytes(), input.length()); + } + public ParseResult parse(byte[] input, int length) { + return Hammer.parse(this, input, length); + } private long inner; Parser(long inner) {this.inner=inner;} -- GitLab