You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jt...@apache.org on 2020/12/07 14:27:14 UTC

[netbeans-html4j] branch master updated (2ff2696 -> f28cd08)

This is an automated email from the ASF dual-hosted git repository.

jtulach pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-html4j.git.


    from 2ff2696  Excluding modpatch transitive dependencies which have disappeared from the Maven central
     new 51d1a5b  Enhancing the TCK documentation with showcases from Script engine TCK usage
     new f28cd08  Documenting KnockoutTCK

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../{SingleCase.java => ScriptEngineCase.java}     | 57 ++++------------------
 ...riptTst.java => ScriptEngineJavaScriptTCK.java} | 18 +++++--
 ...23JavaScriptTest.java => ScriptEngineTest.java} | 20 ++------
 .../net/java/html/boot/script/ScriptsTest.java     |  2 +-
 .../main/java/org/netbeans/html/boot/spi/Fn.java   |  5 ++
 .../org/netbeans/html/json/tck/JavaScriptTCK.java  | 44 ++++++++++++++---
 .../java/org/netbeans/html/json/tck/KOTest.java    | 10 +++-
 .../org/netbeans/html/json/tck/KnockoutTCK.java    | 51 ++++++++++++-------
 .../src/test/java/org/netbeans/html/ko4j/KOFx.java |  2 +
 .../org/netbeans/html/ko4j/KnockoutFXTest.java     |  5 +-
 pom.xml                                            |  1 +
 11 files changed, 119 insertions(+), 96 deletions(-)
 rename boot-script/src/test/java/net/java/html/boot/script/{SingleCase.java => ScriptEngineCase.java} (53%)
 rename boot-script/src/test/java/net/java/html/boot/script/{Jsr223JavaScriptTst.java => ScriptEngineJavaScriptTCK.java} (59%)
 rename boot-script/src/test/java/net/java/html/boot/script/{Jsr223JavaScriptTest.java => ScriptEngineTest.java} (87%)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists


[netbeans-html4j] 02/02: Documenting KnockoutTCK

Posted by jt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jtulach pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-html4j.git

commit f28cd08f58e2511be9b20dcab5e68fc9d0ffe4b2
Author: Jaroslav Tulach <ja...@apidesign.org>
AuthorDate: Mon Dec 7 15:04:27 2020 +0100

    Documenting KnockoutTCK
---
 .../java/org/netbeans/html/json/tck/KOTest.java    | 10 ++++-
 .../org/netbeans/html/json/tck/KnockoutTCK.java    | 51 ++++++++++++++--------
 .../src/test/java/org/netbeans/html/ko4j/KOFx.java |  2 +
 .../org/netbeans/html/ko4j/KnockoutFXTest.java     |  5 ++-
 pom.xml                                            |  1 +
 5 files changed, 48 insertions(+), 21 deletions(-)

diff --git a/json-tck/src/main/java/org/netbeans/html/json/tck/KOTest.java b/json-tck/src/main/java/org/netbeans/html/json/tck/KOTest.java
index 4458ed2..9ca07c9 100644
--- a/json-tck/src/main/java/org/netbeans/html/json/tck/KOTest.java
+++ b/json-tck/src/main/java/org/netbeans/html/json/tck/KOTest.java
@@ -23,10 +23,16 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-/** Annotates method that is part of {@link KnockoutTCK test compatibility kit} 
+/** Annotates method that is part of {@link KnockoutTCK visual test compatibility kit}
+ * or {@link JavaScriptTCK headless test compatibility kit}
  * and should be executed in appropriate environment. The method annotated by
  * this annotation will be public instance method of its class 
- * with no arguments.
+ * with no arguments. A typical way to enumerate such methods is:
+ * <p>
+ * {@codesnippet net.java.html.boot.script.ScriptEngineJavaScriptTCK}
+ * and then one can execute such methods as
+ * <p>
+ * {@codesnippet net.java.html.boot.script.ScriptEngineCase#run}
  *
  * @author Jaroslav Tulach
  */
diff --git a/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java b/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java
index 369c418..59b1774 100644
--- a/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java
+++ b/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java
@@ -31,26 +31,41 @@ import net.java.html.json.tests.OperationsTest;
 import net.java.html.json.tests.Utils;
 import net.java.html.json.tests.WebSocketTest;
 import org.netbeans.html.context.spi.Contexts.Builder;
-import org.openide.util.lookup.ServiceProvider;
 
-/** Entry point for providers of different HTML binding technologies (like
- * Knockout.js in JavaFX's WebView). Sample usage:
+/**
+ * An enhanced, visual <em>Test Compatibility Kit</em> for people providing their own
+ * implementation of {@link org.netbeans.html.boot.spi.Fn.Presenter} or any other system that understands
+ * {@link net.java.html.js.JavaScriptBody} annotation. The {@link KnockoutTCK}
+ * is an extension over {@link JavaScriptTCK} - the <em>headless</em> test
+ * compatibility kit. Once the <em>headless</em> functionality works fine,
+ * it is time to test the visual aspects - at the end the goal is to run visual
+ * <b>Java</b> applications in browser, right?
+ * <p>
+ * The {@link KnockoutTCK} shall be subclassesed and {@code abstract} methods
+ * of the class implemented to provide the necessary environment for execution.
+ * A typical way to obtain all the methods to be tested for each of {@link #testClasses} is:
+ * <p>
+ * {@codesnippet org.netbeans.html.ko4j.KnockoutFXTest}
+ * <p>
+ * The visual tests interact with browser environment and perform asynchronous
+ * network calls. That has two consequences:
+ * <ul>
+ *  <li>the test may ask you to set a server up via {@link KnockoutTCK#prepareWebResource(java.lang.String, java.lang.String, java.lang.String[])} call -
+ *    return URL which the test later connects to
+ *  <li>the test may need to wait - in such case it throws {@link InterruptedException} - wait a while
+ *    and call the test method again (while keeping the instance and its internal state)
+ * </ul>
+ * <p>
+ * The typical way to execute the visual tests requires one to perform something like:
+ * <p>
+ * {@codesnippet org.netbeans.html.ko4j.KOFx}
+ * e.g. initialize the test instance, run the test method. If it yields an
+ * {@link InterruptedException}, run the test again. Should there be no success
+ * in a fixed time, give up and fail the test. Succeed otherwise.
+ * This is more complicated than running headless {@link JavaScriptTCK} tests,
+ * but so is the behavior of typical applications in the browser with access to
+ * network.
  * 
-<pre>
-{@link ServiceProvider @ServiceProvider}(service = KnockoutTCK.class)
-public final class MyKnockoutBindingTest extends KnockoutTCK {
-    {@link Override @Override}
-    protected BrwsrCtx createContext() {
-        // use {@link Builder}.{@link Builder#build() build}();
-    }
-
-    {@code @org.testng.annotations.Factory}
-    public static Object[] create() {
-        return VMTest.newTests().withClasses({@link KnockoutTCK#testClasses}()).build();
-    }
-}
- * </pre>
- *
  * @author Jaroslav Tulach
  */
 public abstract class KnockoutTCK {
diff --git a/ko4j/src/test/java/org/netbeans/html/ko4j/KOFx.java b/ko4j/src/test/java/org/netbeans/html/ko4j/KOFx.java
index 1e34b1c..989705f 100644
--- a/ko4j/src/test/java/org/netbeans/html/ko4j/KOFx.java
+++ b/ko4j/src/test/java/org/netbeans/html/ko4j/KOFx.java
@@ -62,6 +62,7 @@ public final class KOFx implements ITest, Runnable {
         }
     }
 
+    // BEGIN: org.netbeans.html.ko4j.KOFx
     @Override
     public synchronized void run() {
         boolean notify = true;
@@ -102,5 +103,6 @@ public final class KOFx implements ITest, Runnable {
             }
         }
     }
+    // END: org.netbeans.html.ko4j.KOFx
     
 }
diff --git a/ko4j/src/test/java/org/netbeans/html/ko4j/KnockoutFXTest.java b/ko4j/src/test/java/org/netbeans/html/ko4j/KnockoutFXTest.java
index 42dac5b..4c86b00 100644
--- a/ko4j/src/test/java/org/netbeans/html/ko4j/KnockoutFXTest.java
+++ b/ko4j/src/test/java/org/netbeans/html/ko4j/KnockoutFXTest.java
@@ -95,7 +95,9 @@ public final class KnockoutFXTest extends KnockoutTCK {
         return res.toArray();
     }
 
-    private static void seekKOTests(Class<?> c, List<Object> res) throws SecurityException, ClassNotFoundException {
+    // BEGIN: org.netbeans.html.ko4j.KnockoutFXTest
+    private static void seekKOTests(Class<?> c, List<Object> res)
+    throws ClassNotFoundException {
         Class<? extends Annotation> koTest =
             c.getClassLoader().loadClass(KOTest.class.getName()).
             asSubclass(Annotation.class);
@@ -108,6 +110,7 @@ public final class KnockoutFXTest extends KnockoutTCK {
             }
         }
     }
+    // END: org.netbeans.html.ko4j.KnockoutFXTest
 
     private static boolean skipUnsupported(Method m) {
         String version = System.getProperty("java.version"); // NOI18N
diff --git a/pom.xml b/pom.xml
index ed859f3..a5bbba2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -156,6 +156,7 @@ org.netbeans.html.boot.impl:org.netbeans.html.boot.fx:org.netbeans.html.context.
                 <additionalOptions>
                     -snippetpath boot-fx/src/test
                     -snippetpath boot-script/src/test
+                    -snippetpath ko4j/src/test
                     -snippetpath json/src/test
                     -snippetpath webkit/src/test
                     ${javadoc.allowjs}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists


[netbeans-html4j] 01/02: Enhancing the TCK documentation with showcases from Script engine TCK usage

Posted by jt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jtulach pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-html4j.git

commit 51d1a5b543c23a071775ad3746f5f1582c9e95f9
Author: Jaroslav Tulach <ja...@apidesign.org>
AuthorDate: Mon Dec 7 12:22:04 2020 +0100

    Enhancing the TCK documentation with showcases from Script engine TCK usage
---
 .../{SingleCase.java => ScriptEngineCase.java}     | 57 ++++------------------
 ...riptTst.java => ScriptEngineJavaScriptTCK.java} | 18 +++++--
 ...23JavaScriptTest.java => ScriptEngineTest.java} | 20 ++------
 .../net/java/html/boot/script/ScriptsTest.java     |  2 +-
 .../main/java/org/netbeans/html/boot/spi/Fn.java   |  5 ++
 .../org/netbeans/html/json/tck/JavaScriptTCK.java  | 44 ++++++++++++++---
 6 files changed, 71 insertions(+), 75 deletions(-)

diff --git a/boot-script/src/test/java/net/java/html/boot/script/SingleCase.java b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineCase.java
similarity index 53%
rename from boot-script/src/test/java/net/java/html/boot/script/SingleCase.java
rename to boot-script/src/test/java/net/java/html/boot/script/ScriptEngineCase.java
index 872673e..af8b1a7 100644
--- a/boot-script/src/test/java/net/java/html/boot/script/SingleCase.java
+++ b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineCase.java
@@ -18,10 +18,7 @@
  */
 package net.java.html.boot.script;
 
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
 import org.netbeans.html.boot.spi.Fn;
 import org.netbeans.html.boot.impl.FnContext;
 import org.testng.IHookCallBack;
@@ -34,65 +31,31 @@ import org.testng.annotations.Test;
  *
  * @author Jaroslav Tulach
  */
-public final class SingleCase implements ITest, IHookable, Runnable {
-    static final Executor JS = Executors.newSingleThreadExecutor();
+public final class ScriptEngineCase implements ITest, IHookable {
     private final Fn.Presenter p;
-    private final Method m;
-    private Object result;
-    private Object inst;
+    private final Method method;
     private final String prefix;
 
-    SingleCase(String prefix, Fn.Presenter p, Method m) {
+    ScriptEngineCase(String prefix, Fn.Presenter p, Method m) {
         this.prefix = prefix;
         this.p = p;
-        this.m = m;
+        this.method = m;
     }
 
     @Override
     public String getTestName() {
-        return prefix + m.getName();
+        return prefix + method.getName();
     }
 
     @Test
     public synchronized void executeTest() throws Exception {
-        if (result == null) {
-            JS.execute(this);
-            wait();
-        }
-        if (result instanceof Exception) {
-            throw (Exception)result;
-        }
-        if (result instanceof Error) {
-            throw (Error)result;
-        }
-    }
-
-    @Override
-    public synchronized void run() {
-        boolean notify = true;
         try {
             FnContext.currentPresenter(p);
-            if (inst == null) {
-                inst = m.getDeclaringClass().newInstance();
-            }
-            result = m.invoke(inst);
-            if (result == null) {
-                result = this;
-            }
-        } catch (InvocationTargetException ex) {
-            Throwable r = ex.getTargetException();
-            if (r instanceof InterruptedException) {
-                notify = false;
-                JS.execute(this);
-                return;
-            }
-            result = r;
-        } catch (Exception ex) {
-            result = ex;
+            // BEGIN: net.java.html.boot.script.ScriptEngineCase#run
+            Object instance = method.getDeclaringClass().newInstance();
+            method.invoke(instance);
+            // END: net.java.html.boot.script.ScriptEngineCase#run
         } finally {
-            if (notify) {
-                notifyAll();
-            }
             FnContext.currentPresenter(null);
         }
     }
@@ -101,5 +64,5 @@ public final class SingleCase implements ITest, IHookable, Runnable {
     public void run(IHookCallBack ihcb, ITestResult itr) {
         ihcb.runTestMethod(itr);
     }
-    
+
 }
diff --git a/boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTst.java b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineJavaScriptTCK.java
similarity index 59%
rename from boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTst.java
rename to boot-script/src/test/java/net/java/html/boot/script/ScriptEngineJavaScriptTCK.java
index 8cf8c66..755751b 100644
--- a/boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTst.java
+++ b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineJavaScriptTCK.java
@@ -18,14 +18,26 @@
  */
 package net.java.html.boot.script;
 
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.function.Function;
 import org.netbeans.html.json.tck.JavaScriptTCK;
+import org.netbeans.html.json.tck.KOTest;
 
 /**
  *
  * @author Jaroslav Tulach
  */
-public final class Jsr223JavaScriptTst extends JavaScriptTCK {
-    public static Class[] tests() {
-        return testClasses();
+// BEGIN: net.java.html.boot.script.ScriptEngineJavaScriptTCK
+public final class ScriptEngineJavaScriptTCK extends JavaScriptTCK {
+    static <R> void collectTckTests(List<R> res, Function<Method, R> factory) {
+        for (Class c : testClasses()) {
+            for (Method m : c.getMethods()) {
+                if (m.getAnnotation(KOTest.class) != null) {
+                    res.add(factory.apply(m));
+                }
+            }
+        }
     }
 }
+// END: net.java.html.boot.script.ScriptEngineJavaScriptTCK
diff --git a/boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTest.java b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineTest.java
similarity index 87%
rename from boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTest.java
rename to boot-script/src/test/java/net/java/html/boot/script/ScriptEngineTest.java
index d21cbbd..c82f697 100644
--- a/boot-script/src/test/java/net/java/html/boot/script/Jsr223JavaScriptTest.java
+++ b/boot-script/src/test/java/net/java/html/boot/script/ScriptEngineTest.java
@@ -18,8 +18,6 @@
  */
 package net.java.html.boot.script;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -31,7 +29,6 @@ import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
 import net.java.html.boot.BrowserBuilder;
 import org.netbeans.html.boot.spi.Fn;
-import org.netbeans.html.json.tck.KOTest;
 import static org.testng.Assert.assertEquals;
 import org.testng.annotations.Factory;
 
@@ -39,8 +36,8 @@ import org.testng.annotations.Factory;
  *
  * @author Jaroslav Tulach
  */
-public class Jsr223JavaScriptTest {
-    public Jsr223JavaScriptTest() {
+public class ScriptEngineTest {
+    public ScriptEngineTest() {
     }
 
     @Factory public static Object[] compatibilityTests() throws Exception {
@@ -79,16 +76,7 @@ public class Jsr223JavaScriptTest {
         assertNoGlobalSymbolsLeft(engine);
         final String prefix = "[" + engine.getFactory().getEngineName() + "] ";
 
-        Class<? extends Annotation> test = KOTest.class;
-        Class[] arr = Jsr223JavaScriptTst.tests();
-        for (Class c : arr) {
-            for (Method m : c.getMethods()) {
-                if (m.getAnnotation(test) != null) {
-                    res.add(new SingleCase(prefix, browserPresenter[0], m));
-                }
-            }
-        }
-
+        ScriptEngineJavaScriptTCK.collectTckTests(res, (m) -> new ScriptEngineCase(prefix, browserPresenter[0], m));
     }
 
     private static void assertNoGlobalSymbolsLeft(ScriptEngine engine) throws ScriptException {
@@ -111,7 +99,7 @@ public class Jsr223JavaScriptTest {
     }
 
     private static Fn.Presenter createPresenter(ScriptEngine engine) {
-        final Executor someExecutor = SingleCase.JS;
+        final Executor someExecutor = (r) -> r.run();
         // BEGIN: Jsr223JavaScriptTest#createPresenter
         return Scripts.newPresenter()
             .engine(engine)
diff --git a/boot-script/src/test/java/net/java/html/boot/script/ScriptsTest.java b/boot-script/src/test/java/net/java/html/boot/script/ScriptsTest.java
index 9b4775a..a43f01c 100644
--- a/boot-script/src/test/java/net/java/html/boot/script/ScriptsTest.java
+++ b/boot-script/src/test/java/net/java/html/boot/script/ScriptsTest.java
@@ -39,7 +39,7 @@ public class ScriptsTest {
         List<Object[]> res = new ArrayList<>();
         final ScriptEngineManager manager = new ScriptEngineManager();
         for (ScriptEngineFactory f : manager.getEngineFactories()) {
-            if (!Jsr223JavaScriptTest.isJavaScriptEngineFactory(f)) {
+            if (!ScriptEngineTest.isJavaScriptEngineFactory(f)) {
                 continue;
             }
             res.add(new Object[] { f.getScriptEngine() });
diff --git a/boot/src/main/java/org/netbeans/html/boot/spi/Fn.java b/boot/src/main/java/org/netbeans/html/boot/spi/Fn.java
index a4f2f45..ffe2d79 100644
--- a/boot/src/main/java/org/netbeans/html/boot/spi/Fn.java
+++ b/boot/src/main/java/org/netbeans/html/boot/spi/Fn.java
@@ -240,7 +240,12 @@ public abstract class Fn {
      * Should be provided by a library included in the application and registered
      * in <code>META-INF/services</code>, for example with
      * <code>@ServiceProvider(service = Fn.Presenter.class)</code> annotation.
+     * To verify the implementation of the presenter is correct, implement
+     * associated TCK (e.g. test compatibility kit) at least the headless
+     * one as illustrated at:
      * <p>
+     * {@codesnippet net.java.html.boot.script.ScriptEngineJavaScriptTCK}
+     * 
      * Since 0.7 a presenter may implement {@link Executor} interface, in case
      * it supports single threaded execution environment. The executor's
      * {@link Executor#execute(java.lang.Runnable)} method is then supposed
diff --git a/json-tck/src/main/java/org/netbeans/html/json/tck/JavaScriptTCK.java b/json-tck/src/main/java/org/netbeans/html/json/tck/JavaScriptTCK.java
index 09b8315..5d39f9a 100644
--- a/json-tck/src/main/java/org/netbeans/html/json/tck/JavaScriptTCK.java
+++ b/json-tck/src/main/java/org/netbeans/html/json/tck/JavaScriptTCK.java
@@ -24,27 +24,55 @@ import net.java.html.js.tests.ExposedPropertiesTest;
 import org.netbeans.html.boot.spi.Fn;
 import org.netbeans.html.boot.spi.Fn.Presenter;
 
-/** Entry point for those who want to verify that their implementation of
- * {@link Presenter} is good enough to support existing Java/JavaScript 
- * communication use-cases. Subclass this class, get list of {@link #testClasses() classes}
- * find methods annotated by {@link KOTest} annotation and execute them.
+/** Basic <em>Test Compatibility Kit</em> for people providing their own
+ * implementation of {@link Presenter} or any other system that understands
+ * {@link net.java.html.js.JavaScriptBody} annotation. The {@link JavaScriptTCK}
+ * tests are <em>headless</em> - e.g. they don't need access to browser APIs
+ * like DOM. It is possible to execute them in <em>node</em>
+ * or in a plain {@link javax.script.ScriptEngine} environment. The tests are focused
+ * on Java/JavaScript interactions, calls and exchange of objects between the
+ * two worlds. See {@link KnockoutTCK} for UI oriented tests.
  * <p>
+ * Implement your system, setup your <em>headless</em> environment for
+ * execution of JavaScript and execute the tests. There are the steps to follow:
+ * <ul>
+ *  <li>subclass this class</li>
+ *  <li>get list of {@link #testClasses() test classes}</li>
+ *  <li>find their methods annotated by {@link KOTest} annotation</li>
+ *  <li>execute them</li>
+ * </ul>
+ * <p>
+ * Typical way to iterate through all the test methods looks like this:
+ * <p>
+ * {@codesnippet net.java.html.boot.script.ScriptEngineJavaScriptTCK}
+ * <p>
+ * by subclassing {@link JavaScriptTCK} one gets access to {@code protected}
+ * method {@link JavaScriptTCK#testClasses} and can obtain all the TCK classes.
+ * One can use any <em>factory</em> and create objects suitable for any
+ * testing framework. Typical invocation of a single test then looks like
+ * <p>
+ * {@codesnippet net.java.html.boot.script.ScriptEngineCase#run}
+ * e.g. one creates an instance of the object and invokes its test {@code method}.
+ * <p>
+ * When the test provided by this <em>headless TCK</em> are passing,
+ * consider also testing your environment on a
+ * {@link KnockoutTCK visual DOM-based TCK}.
  *
  * @author Jaroslav Tulach
+ * @see KnockoutTCK
  * @since 0.7
  */
 public abstract class JavaScriptTCK {
     /** Gives you list of classes included in the TCK. Their test methods
      * are annotated by {@link KOTest} annotation. The methods are public
-     * instance methods that take no arguments. The method should be 
+     * instance methods that take no arguments. The method should be
      * invoke in a presenter context {@link Fn#activate(org.netbeans.html.boot.spi.Fn.Presenter)}.
-     * 
+     *
      * @return classes with methods annotated by {@link KOTest} annotation
      */
     protected static Class<?>[] testClasses() {
-        return new Class[] { 
+        return new Class[] {
             JavaScriptBodyTest.class, GCBodyTest.class, ExposedPropertiesTest.class
         };
     }
-    
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists