- 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 <your .js file>

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
 */
