diff --git a/build.sbt b/build.sbt index 65845ba..b090782 100644 --- a/build.sbt +++ b/build.sbt @@ -18,7 +18,7 @@ libraryDependencies ++= Seq( ) // filter the super-source directory from the build -unmanagedSources in Compile ~= (_.filterNot(_.getPath.indexOf("com/samskivert/mustache/gwt") != -1)) +unmanagedSources in Compile ~= (_.filterNot(_.getPath.indexOf("com/samskivert/gwt") != -1)) // add our sources to the main jar file (including super-sources) unmanagedResourceDirectories in Compile <+= baseDirectory / "src/main/java" diff --git a/pom.xml b/pom.xml index 99dc06d..667a9ba 100644 --- a/pom.xml +++ b/pom.xml @@ -41,6 +41,12 @@ + + com.google.gwt + gwt-user + 2.4.0 + test + junit junit @@ -59,6 +65,7 @@ + org.apache.maven.plugins @@ -73,10 +80,25 @@ -Xlint" "-Xlint:-serial" "-Xlint:-path - com/samskivert/mustache/gwt/** + com/samskivert/gwt/** + + org.codehaus.mojo + gwt-maven-plugin + 2.4.0 + + htmlunit + + + + + test + + + + org.apache.maven.plugins maven-resources-plugin @@ -89,6 +111,9 @@ org.apache.maven.plugins maven-surefire-plugin 2.6 + + **/*Test.java + org.apache.maven.plugins diff --git a/src/main/java/com/samskivert/Mustache.gwt.xml b/src/main/java/com/samskivert/Mustache.gwt.xml new file mode 100644 index 0000000..9945785 --- /dev/null +++ b/src/main/java/com/samskivert/Mustache.gwt.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/java/com/samskivert/mustache/gwt/com/samskivert/mustache/DefaultCollector.java b/src/main/java/com/samskivert/gwt/com/samskivert/mustache/DefaultCollector.java similarity index 75% rename from src/main/java/com/samskivert/mustache/gwt/com/samskivert/mustache/DefaultCollector.java rename to src/main/java/com/samskivert/gwt/com/samskivert/mustache/DefaultCollector.java index 474974f..c7011a8 100644 --- a/src/main/java/com/samskivert/mustache/gwt/com/samskivert/mustache/DefaultCollector.java +++ b/src/main/java/com/samskivert/gwt/com/samskivert/mustache/DefaultCollector.java @@ -17,8 +17,10 @@ public class DefaultCollector extends BasicCollector if (iter != null) return iter; if (value.getClass().isArray()) { - return Arrays.asList((Object[])value); + return Arrays.asList((Object[])value).iterator(); } return null; } + + // TODO: override createFetcher and do some magic for JavaScript/JSON objects } diff --git a/src/main/java/com/samskivert/gwt/java/io/Reader.java b/src/main/java/com/samskivert/gwt/java/io/Reader.java new file mode 100644 index 0000000..e5db421 --- /dev/null +++ b/src/main/java/com/samskivert/gwt/java/io/Reader.java @@ -0,0 +1,12 @@ +// +// $Id$ + +package java.io; + +/** + * A minimal version of {@code Reader} to satisfy GWT. + */ +public interface Reader +{ + int read () throws IOException; +} diff --git a/src/main/java/com/samskivert/gwt/java/io/StringReader.java b/src/main/java/com/samskivert/gwt/java/io/StringReader.java new file mode 100644 index 0000000..4f9e099 --- /dev/null +++ b/src/main/java/com/samskivert/gwt/java/io/StringReader.java @@ -0,0 +1,21 @@ +// +// $Id$ + +package java.io; + +/** + * A basic implementation of {@code StringReader} for use in GWT. + */ +public class StringReader implements Reader +{ + public StringReader (String data) { + _data = data; + } + + public int read () throws IOException { + return (_pos >= _data.length()) ? -1 : _data.charAt(_pos++); + } + + protected final String _data; + protected int _pos; +} diff --git a/src/main/java/com/samskivert/gwt/java/io/StringWriter.java b/src/main/java/com/samskivert/gwt/java/io/StringWriter.java new file mode 100644 index 0000000..a3e9891 --- /dev/null +++ b/src/main/java/com/samskivert/gwt/java/io/StringWriter.java @@ -0,0 +1,20 @@ +// +// $Id$ + +package java.io; + +/** + * A basic implementation of {@code StringReader} for use in GWT. + */ +public class StringWriter implements Writer +{ + public void write (String text) throws IOException { + _buf.append(text); + } + + @Override public String toString () { + return _buf.toString(); + } + + protected final StringBuilder _buf = new StringBuilder(); +} diff --git a/src/main/java/com/samskivert/gwt/java/io/Writer.java b/src/main/java/com/samskivert/gwt/java/io/Writer.java new file mode 100644 index 0000000..24d3d4b --- /dev/null +++ b/src/main/java/com/samskivert/gwt/java/io/Writer.java @@ -0,0 +1,12 @@ +// +// $Id$ + +package java.io; + +/** + * A minimal version of {@code Writer} to satisfy GWT. + */ +public interface Writer +{ + void write (String text) throws IOException; +} diff --git a/src/test/java/com/samskivert/mustache/GwtTestMustache.java b/src/test/java/com/samskivert/mustache/GwtTestMustache.java new file mode 100644 index 0000000..1f8e659 --- /dev/null +++ b/src/test/java/com/samskivert/mustache/GwtTestMustache.java @@ -0,0 +1,43 @@ +// +// JMustache - A Java implementation of the Mustache templating language +// http://github.com/samskivert/jmustache/blob/master/LICENSE + +package com.samskivert.mustache; + +import java.util.HashMap; +import java.util.Map; + +import com.google.gwt.junit.client.GWTTestCase; + +import org.junit.*; +import static org.junit.Assert.*; + +/** + * Tests basic Mustache operation in GWT. + */ +public class GwtTestMustache extends GWTTestCase +{ + public String getModuleName () { + return "com.samskivert.Mustache"; + } + + @Test public void testSimpleVariable () { + test("bar", "{{foo}}", context("foo", "bar")); + } + + protected void test (String expected, String template, Object ctx) { + test(Mustache.compiler(), expected, template, ctx); + } + + protected void test (Mustache.Compiler compiler, String expected, String template, Object ctx) { + assertEquals(expected, compiler.compile(template).execute(ctx)); + } + + protected Object context (Object... data) { + Map ctx = new HashMap(); + for (int ii = 0; ii < data.length; ii += 2) { + ctx.put(data[ii].toString(), data[ii+1]); + } + return ctx; + } +}