blob: 217ad6827a4ad405545e7514c91e4fc82ec5e8cf [file] [log] [blame] [view]
Hacking on Sky
==============
Building
--------
* Follow the setup & build instructions for [Mojo](https://github.com/domokit/mojo)
If building for Android, be aware a patch to V8's GN build is required:
https://code.google.com/p/v8/issues/detail?id=3841
Running applications
--------------------
* ``./sky/tools/skydb start out/Debug [url]``
`skydb` has numerous commands, visible via `skydb help`. Common ones include:
* `skybd start` BUILD_DIR [url]
* `skydb load` [url]
* `skydb stop`
* `skydb print_crash` # Symbolicate the most recent crash from android.
Once `skydb start` is issued, all subsequent commands will be sent to
the running mojo_shell instance (even on an attached android device).
`skydb start` reads gn args from the passed build directory to
determine whether its using android, etc.
* ``./sky/tools/test_sky --debug``
* This runs the tests against ``//out/Debug``. If you want to run against
``//out/Release``, omit the ``--debug`` flag.
Running tests manually
----------------------
* ``sky/tools/run_sky_httpd``
* ``out/Debug/mojo_shell --args-for="mojo:native_viewport_service --use-headless-config" --content-handlers=text/html,mojo:sky_viewer --url-mappings=mojo:window_manager=mojo:sky_tester mojo:window_manager``
* The ``sky_tester`` should print ``#READY`` when ready
* Type the URL you wish to run, for example ``http://127.0.0.1:8000/lowlevel/text.html``, and press the enter key
* The harness should print the results of the test. You can then type another URL.
Writing tests
-------------
* Import ``resources/mocha.html`` and ``resources/chai.html``
* Write tests in [mocha format](http://mochajs.org/#getting-started) and use [chai asserts](http://chaijs.com/api/assert/):
```html
describe('My pretty test of my subject', function() {
var subject = new MySubject();
it('should be pretty', function() {
assert.ok(subject.isPretty);
});
});
```
Adding pixel tests
------------------
Sky does not have proper pixel tests. Instead we have only reftests.
If you want a pixel test, you need to dump the png from a reftest,
upload it to googlestorage and then put and <img> pointing to the
uploaded file in the reference.
1. Create your test (e.g. foo.sky).
2. Create an dummy reference file (foo-expected.sky).
3. Run the test (it will fail).
4. Copy the -actual.png file to googlestorage (see below).
5. Put an ``<img>`` pointing to your newly uploaded png in the reference file at
http://storage.googleapis.com/mojo/sky-pngs/SHA1_HASH_HERE
Copying the file to googlestorage:
```bash
$ sha1sum ../out/Debug/layout-test-results/framework/flights-app-pixels-actual.png
db0508cdfe69e996a93464050dc383f6480f1283 ../out/Debug/layout-test-results/framework/flights-app-pixels-actual.png
$ gsutil.py cp ../out/Debug/layout-test-results/framework/flights-app-pixels-actual.png gs://mojo/sky-pngs/db0508cdfe69e996a93464050dc383f6480f1283
```
Long-term, we should not have these tests at all and should just
dump paint commands. In the short-term, if we find we're doing this
a lot we should obviously automate this process, e.g. test_sky could
do all of this work, including spitting out the correct reference file.