- What is Nashorn? Nashorn is a runtime environment for programs written in ECMAScript 5.1 that runs on top of JVM. - How to find out more about ECMAScript 5.1? The specification can be found at http://www.ecma-international.org/publications/standards/Ecma-262.htm - How to checkout sources of Nashorn project? Nashorn project uses Mercurial source code control system. You can download Mercurial from http://mercurial.selenic.com/wiki/Download Information about the forest extension can be found at http://mercurial.selenic.com/wiki/ForestExtension and downloaded using hg clone https://bitbucket.org/gxti/hgforest You can clone Nashorn Mercurial forest using this command: hg fclone http://hg.openjdk.java.net/nashorn/jdk9 nashorn~jdk9 To update your copy of the forest (fwith the latest code: (cd nashorn~jdk9 ; hg fpull) Or just the nashorn subdirectory with (cd nashorn~jdk9/nashorn ; hg pull -u) To learn about Mercurial in detail, please visit http://hgbook.red-bean.com. - How to build? To build Nashorn, you need to install JDK 9. You may use the Nashorn forest build (recommended) or download from java.net. You will need to set JAVA_HOME environmental variable to point to your JDK installation directory. cd nashorn~jdk9/nashorn/make ant clean; ant - How to run? Use the jjs script (see RELESE_README): cd nashorn~jdk9/nashorn sh bin/jjs Nashorn supports javax.script API. It is possible to drop nashorn.jar in class path and request for "nashorn" script engine from javax.script.ScriptEngineManager. Look for samples under the directory test/src/jdk/nashorn/api/scripting/. - Documentation Comprehensive development documentation is found in the Nashorn JavaDoc. You can build it using: cd nashorn~jdk9/nashorn/make ant javadoc after which you can view the generated documentation at dist/javadoc/index.html. - Running tests Nashorn tests are TestNG based. Running tests requires downloading the TestNG library and placing its jar file into the test/lib subdirectory. This is done automatically when executing the "ant externals" command to get external test suites (see below). Once TestNG is properly installed, you can run the tests using: cd make ant clean test You can also run the ECMA-262 test suite with Nashorn. In order to do that, you will need to get a copy of it and put it in test/script/external/test262 directory. A convenient way to do it is: git clone https://github.com/tc39/test262 test/script/external/test262 Alternatively, you can check it out elsewhere and make test/script/external/test262 a symbolic link to that directory. After you've done this, you can run the ECMA-262 tests using: cd nashorn~jdk9/nashorn/make ant test262 Ant target to get/update external test suites: ant externals ant update-externals These tests take time, so we have a parallelized runner for them that takes advantage of all processor cores on the computer: cd nashorn~jdk9/nashorn/make ant test262parallel - How to write your own test? Nashorn uses it's own simple test framework. Any .js file dropped under nashorn/test directory is considered as a test. A test file can optionally have .js.EXPECTED (foo.js.EXPECTED for foo.js) associated with it. The .EXPECTED file, if exists, should contain the output expected from compiling and/or running the test file. The test runner crawls these directories for .js files and looks for JTReg-style @foo comments to identify tests. * @test - A test is tagged with @test. * @test/fail - Tests that are supposed to fail (compiling, see @run/fail for runtime) are tagged with @test/fail. * @test/compile-error - Test expects compilation to fail, compares output. * @test/warning - Test expects compiler warnings, compares output. * @test/nocompare - Test expects to compile [and/or run?] successfully(may be warnings), does not compare output. * @subtest - denotes necessary file for a main test file; itself is not a test. * @run - A test that should be run is also tagged with @run (otherwise the test runner only compiles the test). * @run/fail - A test that should compile but fail with a runtime error. * @run/ignore-std-error - script may produce output on stderr, ignore this output. * @argument - pass an argument to script. * @option \ - pass option to engine, sample. /** * @option --dump-ir-graph * @test */