README revision 776:1a9a2d8bd800
1- What is Nashorn?
2
3Nashorn is a runtime environment for programs written in ECMAScript 5.1
4that runs on top of JVM.
5
6- How to find out more about ECMAScript 5.1?
7
8The specification can be found at
9
10    http://www.ecma-international.org/publications/standards/Ecma-262.htm
11
12- How to checkout sources of Nashorn project?
13
14Nashorn project uses Mercurial source code control system. You can
15download Mercurial from http://mercurial.selenic.com/wiki/Download
16
17Information about the forest extension can be found at
18
19    http://mercurial.selenic.com/wiki/ForestExtension
20
21and downlaoded using
22
23    hg clone https://bitbucket.org/gxti/hgforest
24
25You can clone Nashorn Mercurial forest using this command:
26
27    hg fclone http://hg.openjdk.java.net/nashorn/jdk8 nashorn~jdk8
28    
29To update your copy of the forest (fwith the latest code:
30
31    (cd nashorn~jdk8 ; hg fpull)
32    
33Or just the nashorn subdirectory with
34
35    (cd nashorn~jdk8/nashorn ; hg pull -u)
36    
37To learn about Mercurial in detail, please visit http://hgbook.red-bean.com.
38
39- How to build?
40
41To build Nashorn, you need to install JDK 8. You may use the Nashorn
42forest build (recommended) or down load from java.net.  You will need to
43set JAVA_HOME environmental variable to point to your JDK installation
44directory.
45
46    cd nashorn~jdk8/nashorn/make
47    ant clean; ant
48
49- How to run?
50
51Use the jjs script (see RELESE_README):
52
53    cd nashorn~jdk8/nashorn
54    sh bin/jjs <your .js file>
55
56Nashorn supports javax.script API. It is possible to drop nashorn.jar in
57class path and request for "nashorn" script engine from
58javax.script.ScriptEngineManager. 
59
60Look for samples under the directory test/src/jdk/nashorn/api/scripting/.
61
62- Documentation
63
64Comprehensive development documentation is found in the Nashorn JavaDoc. You can
65build it using:
66
67    cd nashorn~jdk8/nashorn/make
68    ant javadoc
69    
70after which you can view the generated documentation at dist/javadoc/index.html.
71
72- Running tests
73
74Nashorn tests are TestNG based. Running tests requires downloading the
75TestNG library and placing its jar file into the lib subdirectory:
76
77    # download and install TestNG
78    wget http://testng.org/testng-x.y.z.zip
79    unzip testng-x.y.z.zip
80    cp testng-x.y.z/testng-x.y.z.jar test/lib/testng.jar
81    
82After that, you can run the tests using:
83    cd make
84    ant clean test
85    
86You can also run the ECMA-262 test suite with Nashorn. In order to do
87that, you will need to get a copy of it and put it in
88test/script/external/test262 directory. A convenient way to do it is:
89
90   git clone https://github.com/tc39/test262 test/script/external/test262
91    
92Alternatively, you can check it out elsewhere and make
93test/script/external/test262 a symbolic link to that directory. After
94you've done this, you can run the ECMA-262 tests using:
95
96    cd nashorn~jdk8/nashorn/make
97    ant test262
98
99Ant target to get/update external test suites:
100
101    ant externals
102    ant update-externals
103    
104These tests take time, so we have a parallelized runner for them that
105takes advantage of all processor cores on the computer:
106
107    cd nashorn~jdk8/nashorn/make
108    ant test262parallel
109    
110- How to write your own test?
111
112Nashorn uses it's own simple test framework. Any .js file dropped under
113nashorn/test directory is considered as a test. A test file can
114optionally have .js.EXPECTED (foo.js.EXPECTED for foo.js) associated
115with it. The .EXPECTED file, if exists, should contain the output
116expected from compiling and/or running the test file.
117
118The test runner crawls these directories for .js files and looks for
119JTReg-style @foo comments to identify tests.
120
121    * @test - A test is tagged with @test.
122
123    * @test/fail - Tests that are supposed to fail (compiling, see @run/fail
124      for runtime) are tagged with @test/fail.
125
126    * @test/compile-error - Test expects compilation to fail, compares
127      output.
128
129    * @test/warning - Test expects compiler warnings, compares output.
130
131    * @test/nocompare - Test expects to compile [and/or run?]
132      successfully(may be warnings), does not compare output.
133
134    * @subtest - denotes necessary file for a main test file; itself is not
135      a test.
136
137    * @run - A test that should be run is also tagged with @run (otherwise
138      the test runner only compiles the test).
139
140    * @run/fail - A test that should compile but fail with a runtime error.
141
142    * @run/ignore-std-error - script may produce output on stderr, ignore
143      this output.
144
145    * @argument - pass an argument to script.
146
147    * @option \ - pass option to engine, sample.
148
149/**
150 * @option --dump-ir-graph
151 * @test
152 */
153