README with instruction for compiling and run tests
Using markdown syntax compatible with github
Change-Id: I512f381b0da90fe9594ac0a2cc772f1f37407a02
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..28c2419
--- /dev/null
+++ b/README.md
@@ -0,0 +1,217 @@
+## GWT
+
+ GWT is the official open source project for GWT releases 2.5 and onwards.
+
+ In this document you have some quick instructions to build the SDK from
+ source code and to run its tests.
+
+ For a more detailed documentation visit our [web site](http://gwtproject.org).
+ If you are interested in contributing with the project, please read the
+ [Making GWT better](http://gwtproject.gquery.org/makinggwtbetter.html)
+ section.
+
+### Building the GWT SDK:
+
+ - In order to build GWT, `java` and `ant` are required in your system.
+
+ - Optional: if you want to compile elemental you need
+ `python` and `g++` installed.
+
+ - You need the [gwt-tools](https://google-web-tookit.googlecode.com/svn/tools/)
+ checked out and up-to-date, and it will be placed
+ by default at `../tools`. You can override the default
+ location using the GWT_TOOLS environment variable or passing `-Dgwt.tools=`
+ argument to ant.
+
+ _Note: that you need `svn` to checkout `gwt-tools`_
+
+ - To create the SDK distribution files run:
+
+ `$ ant clean elemental dist-dev`
+
+ or if you don't have `python` and `g++` just run
+
+ `$ ant clean dist-dev`
+
+ Then you will get all `.jar` files in the folder `build/lib` and
+ the redistributable file will be: `build/dist/gwt-0.0.0.zip`
+
+ if you want to specify a different version number run:
+
+ `$ ant elemental clean dist-dev -Dgwt.version=x.x.x`
+
+ - To compile everything including examples you have to run
+
+ `$ ant clean elemental dist`
+
+### How to verify GWT code conventions:
+
+ - In GWT we have some conventions so as all code written
+ by contributors look similar being easier to review.
+
+ - After you make any modification, run this command to compile
+ everything including tests, to check APIs, and to verify code style.
+ It shouldn't take longer than 3-4 minutes.
+
+ `$ ant compile.tests apicheck checkstyle -Dprecompile.disable=true`
+
+### How to run GWT tests
+
+ - Previously to run any test you have to set some environment variables
+ to guarantee that they are run in the same conditions for all
+ developers.
+
+ In a _Unix_ like platform you can use the `export` command:
+
+ `$ export TZ=America/Los_Angeles ANT_OPTS=-Dfile.encoding=UTF-8`
+
+ But in _Windows™_ you have to set the time-zone in your control panel, and
+ the environment variables using the command `set`.
+
+ - Finally you can run all test suites with the following command, but be
+ prepared because it could take hours, and probably it would fail because
+ of timeouts, etc.
+
+ `$ ant test`
+
+ - Thus, you might want to run only certain tests so as you can
+ focus on checking the modifications you are working on.
+
+ GWT build scripts use specific ant tasks and a bunch of system
+ properties listed in the following table to specify which tests
+ to run and how.
+
+ For instance to run the task `test` in the module `user` you
+ have to change to the `user` folder and run `ant` with the task
+ as argument, adding any other property with the `-D` flag:
+
+ `$ ( cd user && ant test -Dtest.emma.htmlunit.disable=true ; cd .. )`
+
+ Module | Task | Property to skip
+ -------------- | ---------------------- | ----------------
+ dev | test | test.dev.disable
+ codeserver | test | test.codeserver.disable
+ user | test | test.user.disable
+ user | test.nongwt | test.nongwt.disable
+ user | test.dev.htmlunit | test.dev.htmlunit.disable
+ user | test.web.htmlunit | test.web.htmlunit.disable
+ user | test.draft.htmlunit | test.draft.htmlunit.disable
+ user | test.nometa.htmlunit | test.nometa.htmlunit.disable
+ user | test.emma.htmlunit | test.emma.htmlunit.disable
+ user | test.coverage.htmlunit | test.coverage.htmlunit.disable
+ user | test.dev.selenium | test.dev.selenium.disable
+ user | test.web.selenium | test.web.selenium.disable
+ user | test.draft.selenium | test.draft.selenium.disable
+ user | test.nometa.selenium | test.nometa.selenium.disable
+ user | test.emma.selenium | test.emma.selenium.disable
+ requestfactory | test |
+ elemental | test |
+ elemental | test.nongwt |
+ elemental | test.dev.htmlunit |
+ elemental | test.web.htmlunit |
+ tools | test |
+
+ Additionally you can utilize some variables to filter which test to run in each task:
+
+ Module | Task | Properties | Default
+ ---------------|---------------------------------------|--------------------------------------|-------------------
+ dev/core | test | gwt.junit.testcase.dev.core.includes | `**/com/google/**/*Test.class`
+ | | gwt.junit.testcase.dev.core.excludes |
+ user | test | gwt.junit.testcase.includes | `**/*Suite.class`
+ user | test.nongwt | gwt.nongwt.testcase.includes | `**/*JreSuite.class`
+ | | gwt.nongwt.testcase.excludes |
+ user | test.web.* test.draft.* test.nometa.* | gwt.junit.testcase.web.includes | `**/*Suite.class`
+ | | gwt.junit.testcase.web.excludes | `**/*JsInteropSuite.class,**/*JreSuite.class,***/OptimizedOnly*`
+ user | test.dev.* test.emma.* | gwt.junit.testcase.dev.includes | `**/*Suite.class`
+ | | gwt.junit.testcase.dev.excludes | `**/*JsInteropSuite.class,**/*JreSuite.class,***/OptimizedOnly*`
+
+### Examples
+
+ - Run all tests in dev
+
+ `$ ( cd dev && ant test ; cd .. )`
+
+ _Note: that the last `cd ..' is only needed in Windows._
+
+ - There is another option to do the same but without changing to the
+ module folder. We have to specify the module as the ant task, and
+ the task as a target argument.
+
+ `$ ant dev -Dtarget=test`
+
+ - Run all tests in codeserver
+
+ `$ ( cd dev/codeserver && ant test )`
+
+ or
+
+ `$ ant codeserver -Dtarget=test -Dtest.dev.disable=true`
+
+ _Note: that we disable dev tests because code server depends on dev
+ and we don`t want to run its tests._
+
+ - Run all tests in elemental:
+
+ `$ ( cd elemental && ant test.nongwt )`
+
+ or
+
+ `$ ant elemental -Dtarget=test -Dtest.dev.disable=true -Dtest.user.disable=true`
+
+ _Note: that we have to disable dev and user tests because elemental
+ depends on both._
+
+ - Run all tests in tools
+
+ `$ ant tools -Dtarget=test -Dtest.dev.disable=true -Dtest.user.disable=true`
+
+ - Run only the JsniRefTest in dev
+
+ ```
+ $ ant dev -Dtarget=test \
+ -Dgwt.junit.testcase.dev.core.includes="**/JsniRefTest.class"
+ ```
+
+ - Run a couple of tests in dev
+
+ ```
+ $ ant dev -Dtarget=test \
+ -Dgwt.junit.testcase.dev.core.includes="**/JsniRefTest.class,**/JsParserTest.class"
+ ```
+
+ _Note: that you have to use regular expressions separated by comma to
+ select the test classes to execute._
+
+ - Run all Jre tests in user, they should take not longer than 3min.
+ We have two ways to run them. Although the second case is more
+ complex it is here to know how disable properties work.
+
+ `$ ( cd user && ant test.nongwt )`
+
+ or
+
+ ```
+ $ ant user -Dtarget=test -Dtest.dev.disable=true \
+ -Dtest.dev.htmlunit.disable=true \
+ -Dtest.web.htmlunit.disable=true \
+ -Dtest.coverage.htmlunit.disable=true \
+ -Dtest.dev.selenium.disable=true \
+ -Dtest.draft.htmlunit.disable=true \
+ -Dtest.draft.selenium.disable=true \
+ -Dtest.emma.htmlunit.disable=true \
+ -Dtest.emma.selenium.disable=true \
+ -Dtest.nometa.htmlunit.disable=true \
+ -Dtest.nometa.selenium.disable=true \
+ -Dtest.web.selenium.disable=true
+ ```
+
+ _Note: that we have to set all disable variables but `test.nongwt.disable`_
+
+ - Run certain Jre tests in the user module.
+
+ `$ ( cd user && ant test.nongwt -Dgwt.nongwt.testcase.includes="**/I18NJreSuite.class" )`
+
+ - Run all GWT tests in user using htmlunit in dev mode.
+
+ `$ ( cd user && ant test.dev.htmlunit )`
+