# HG changeset patch # User Jaroslav Tulach # Date 1379890754 -7200 # Node ID 5b3ae17babdf34932161c4c4ced29c730dd2889c # Parent 70532b5324e2a4ef2a72d03ed70e435193bd934a Can we run Javac in the bck2brwsr VM? diff -r 70532b5324e2 -r 5b3ae17babdf dew/pom.xml --- a/dew/pom.xml Sun Sep 22 21:56:49 2013 +0200 +++ b/dew/pom.xml Mon Sep 23 00:59:14 2013 +0200 @@ -87,5 +87,18 @@ javaquery.api ${project.version} + + org.apidesign.bck2brwsr + vmtest + ${project.version} + test + jar + + + ${project.groupId} + launcher.http + ${project.version} + test + diff -r 70532b5324e2 -r 5b3ae17babdf dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java --- a/dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java Sun Sep 22 21:56:49 2013 +0200 +++ b/dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java Mon Sep 23 00:59:14 2013 +0200 @@ -29,8 +29,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.tools.Diagnostic; import javax.tools.DiagnosticListener; import javax.tools.FileObject; @@ -55,8 +53,8 @@ private final String html; private Compile(String html, String code) throws IOException { - this.pkg = findPkg(code); - this.cls = findCls(code); + this.pkg = find("package", ';', code); + this.cls = find("class", ' ', code); this.html = html; classes = compile(html, code); } @@ -177,23 +175,20 @@ public void report(Diagnostic diagnostic) { errors.add(diagnostic); } - private static String findPkg(String java) throws IOException { - Pattern p = Pattern.compile("package\\p{javaWhitespace}*([\\p{Alnum}\\.]+)\\p{javaWhitespace}*;", Pattern.MULTILINE); - Matcher m = p.matcher(java); - if (!m.find()) { - throw new IOException("Can't find package declaration in the java file"); + private static String find(String pref, char term, String java) throws IOException { + int pkg = java.indexOf(pref); + if (pkg != -1) { + pkg += pref.length(); + while (Character.isWhitespace(java.charAt(pkg))) { + pkg++; + } + int semicolon = java.indexOf(term, pkg); + if (semicolon != -1) { + String pkgName = java.substring(pkg, semicolon).trim(); + return pkgName; + } } - String pkg = m.group(1); - return pkg; - } - private static String findCls(String java) throws IOException { - Pattern p = Pattern.compile("class\\p{javaWhitespace}*([\\p{Alnum}\\.]+)\\p{javaWhitespace}", Pattern.MULTILINE); - Matcher m = p.matcher(java); - if (!m.find()) { - throw new IOException("Can't find package declaration in the java file"); - } - String cls = m.group(1); - return cls; + throw new IOException("Can't find " + pref + " declaration in the java file"); } String getHtml() { diff -r 70532b5324e2 -r 5b3ae17babdf dew/src/test/java/org/apidesign/bck2brwsr/dew/CompileTest.java --- a/dew/src/test/java/org/apidesign/bck2brwsr/dew/CompileTest.java Sun Sep 22 21:56:49 2013 +0200 +++ b/dew/src/test/java/org/apidesign/bck2brwsr/dew/CompileTest.java Mon Sep 23 00:59:14 2013 +0200 @@ -18,15 +18,17 @@ package org.apidesign.bck2brwsr.dew; import java.io.IOException; +import org.apidesign.bck2brwsr.vmtest.Compare; +import org.apidesign.bck2brwsr.vmtest.VMTest; import static org.testng.Assert.*; -import org.testng.annotations.Test; +import org.testng.annotations.Factory; /** * * @author Jaroslav Tulach */ public class CompileTest { - @Test public void testCompile() throws IOException { + @Compare public void testCompile() throws IOException { String html = "" + " " + ""; @@ -42,4 +44,8 @@ assertNotNull(result.get("x/y/z/X.class"), "Class X is compiled: " + result); assertNotNull(result.get("x/y/z/Index.class"), "Class Index is compiled: " + result); } + + @Factory public static Object[] create() { + return VMTest.create(CompileTest.class); + } } diff -r 70532b5324e2 -r 5b3ae17babdf launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Sun Sep 22 21:56:49 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Mon Sep 23 00:59:14 2013 +0200 @@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; +import javax.tools.ToolProvider; import org.apidesign.bck2brwsr.launcher.InvocationContext.Resource; import org.glassfish.grizzly.PortRange; import org.glassfish.grizzly.http.server.HttpHandler; @@ -81,6 +82,7 @@ public BaseHTTPLauncher(String cmd) { this.cmd = cmd; addClassLoader(BaseHTTPLauncher.class.getClassLoader()); + addClassLoader(ToolProvider.getSystemToolClassLoader()); setTimeout(180000); } diff -r 70532b5324e2 -r 5b3ae17babdf launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java --- a/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Sun Sep 22 21:56:49 2013 +0200 +++ b/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Mon Sep 23 00:59:14 2013 +0200 @@ -51,9 +51,13 @@ "(function WrapperVM(global) {" + " function ldCls(res) {\n" + " var request = new XMLHttpRequest();\n" + + " console.log('Loading ' + res);\n" + " request.open('GET', '/classes/' + res, false);\n" + " request.send();\n" - + " if (request.status !== 200) return null;\n" + + " if (request.status !== 200) {\n" + + " console.warn(' cannot load ' + res);\n" + + " return null;\n" + + " }\n" + " var arr = eval('(' + request.responseText + ')');\n" + " return arr;\n" + " }\n" diff -r 70532b5324e2 -r 5b3ae17babdf pom.xml --- a/pom.xml Sun Sep 22 21:56:49 2013 +0200 +++ b/pom.xml Mon Sep 23 00:59:14 2013 +0200 @@ -16,6 +16,7 @@ RELEASE73 COPYING 0.6 + none dew