Rebasing the Inflater support on jzlib which, unlike GNU ClassPath, has correct implementation of Huffman code. Making the implementation more easily testable by turning Inflater and ZipInputStream into pure delegates. Current implementation is going to need proper long support.
2 * Back 2 Browser Bytecode Translator
3 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 2 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. Look for COPYING file in the top folder.
16 * If not, see http://opensource.org/licenses/GPL-2.0.
18 package org.apidesign.bck2brwsr.vmtest.impl;
20 import org.apidesign.bck2brwsr.vmtest.*;
21 import java.lang.reflect.Method;
22 import java.util.ArrayList;
23 import java.util.List;
24 import org.apidesign.bck2brwsr.launcher.Launcher;
25 import org.testng.Assert;
26 import org.testng.ITest;
27 import org.testng.annotations.Factory;
28 import org.testng.annotations.Test;
30 /** A TestNG {@link Factory} that seeks for {@link Compare} annotations
31 * in provided class and builds set of tests that compare the computations
32 * in real as well as JavaScript virtual machines. Use as:<pre>
33 * {@code @}{@link Factory} public static create() {
34 * return @{link VMTest}.{@link #create(YourClass.class);
37 * @author Jaroslav Tulach <jtulach@netbeans.org>
39 public final class CompareCase implements ITest {
40 private final Bck2BrwsrCase first, second;
41 private final Method m;
43 private CompareCase(Method m, Bck2BrwsrCase first, Bck2BrwsrCase second) {
49 /** Inspects <code>clazz</code> and for each {@lik Compare} method creates
50 * instances of tests. Each instance runs the test in different virtual
51 * machine and at the end they compare the results.
53 * @param clazz the class to inspect
54 * @return the set of created tests
56 public static Object[] create(Class<?> clazz) {
57 Method[] arr = clazz.getMethods();
58 List<Object> ret = new ArrayList<>();
60 final LaunchSetup l = LaunchSetup.INSTANCE;
65 String p = System.getProperty("vmtest.brwsrs");
69 brwsr = new String[0];
73 for (Method m : arr) {
74 registerCompareCases(m, l, ret, brwsr);
75 registerBrwsrCases(m, l, ret, brwsr);
80 /** Test that compares the previous results.
83 @Test(dependsOnGroups = "run") public void compareResults() throws Throwable {
84 Object v1 = first.value;
85 Object v2 = second.value;
92 Assert.assertEquals(v2, v1, "Comparing results");
93 } catch (AssertionError e) {
94 StringBuilder sb = new StringBuilder();
95 sb.append(e.getMessage());
96 Bck2BrwsrCase.dumpJS(sb, second);
97 throw new AssertionError(sb.toString());
102 * @return name of the tested method followed by a suffix
105 public String getTestName() {
106 return m.getName() + "[Compare " + second.typeName() + "]";
109 private static void registerCompareCases(Method m, final LaunchSetup l, List<Object> ret, String[] brwsr) {
110 Compare c = m.getAnnotation(Compare.class);
114 final Bck2BrwsrCase real = new Bck2BrwsrCase(m, "Java", null, false, null, null);
117 final Bck2BrwsrCase js = new Bck2BrwsrCase(m, "JavaScript", l.javaScript(), false, null, null);
119 ret.add(new CompareCase(m, real, js));
121 for (String b : brwsr) {
122 final Launcher s = l.brwsr(b);
124 final Bck2BrwsrCase cse = new Bck2BrwsrCase(m, b, s, false, null, null);
126 ret.add(new CompareCase(m, real, cse));
129 private static void registerBrwsrCases(Method m, final LaunchSetup l, List<Object> ret, String[] brwsr) {
130 BrwsrTest c = m.getAnnotation(BrwsrTest.class);
134 HtmlFragment f = m.getAnnotation(HtmlFragment.class);
136 f = m.getDeclaringClass().getAnnotation(HtmlFragment.class);
138 Http.Resource[] r = {};
139 Http h = m.getAnnotation(Http.class);
141 h = m.getDeclaringClass().getAnnotation(Http.class);
148 if (brwsr.length == 0) {
149 final Launcher s = l.brwsr(null);
151 ret.add(new Bck2BrwsrCase(m, "Brwsr", s, true, f, r));
153 for (String b : brwsr) {
154 final Launcher s = l.brwsr(b);
156 ret.add(new Bck2BrwsrCase(m, b, s, true, f, r));