Chromium Code Reviews| Index: runtime/observatory/HACKING.md |
| diff --git a/runtime/observatory/HACKING.md b/runtime/observatory/HACKING.md |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3a7112c161ef0316a09bc6c0376b3aa209724e5f |
| --- /dev/null |
| +++ b/runtime/observatory/HACKING.md |
| @@ -0,0 +1,192 @@ |
| +# Hacking Observatory |
| + |
| +These instructions will guide you through the Observatory development and |
| +testing workflow. |
| + |
| +## SDK Setup & Build |
| +Getting ready to start. |
| + |
| +Before starting hacking observatory follow the [instructions][build_sdk] to have a |
|
Cutch
2016/06/21 20:02:07
(here and elsewhere) reflow to 80 character limit.
Cutch
2016/06/21 20:02:07
Before you start to hack on Observatory, follow th
cbernaschina
2016/06/21 21:52:14
Done.
cbernaschina
2016/06/21 21:52:15
Done.
|
| +working environment in which you are able to build and test the Dart SDK. |
| + |
| +### Develop with Dartium ~ Suggested |
| +If you want to avoid triggering a new compilation to JavaScript for each edit |
| +you do, you can use a modified version of Chromium named Dartium that will |
| +interpret you dart code directly. |
| + |
| +You can obtain Dartium in two different ways: |
| +1. [Download][download_dartium] the binaries |
| +2. [Build][build_dartium] Dartium from the source code |
| + |
| + |
| +## Run existing tests |
| +Before hacking Observatory let's run the existing Observatory tests. |
| +We suggest to run all the test in __debug__ mode. |
| + |
| +First build the sdk in debug mode |
| +``` |
| +$ ./tools/build.py --mode debug --arch x64 create_sdk |
|
Cutch
2016/06/21 20:02:07
drop the --arch flag here or add it to test.py (th
cbernaschina
2016/06/21 21:52:15
Done.
|
| +``` |
| + |
| +From the root of the sdk repository run: |
| +``` |
| +$ ./tools/test.py -mdebug service |
| +``` |
| + |
| +## Serve Observatory |
| +Observatory is built as part of building the sdk, but when working on |
| +Observatory we recommend that you use __pub serve__ so you can avoid the |
| +overhead of building the sdk for each change. |
| + |
| +Use __pub__ to __serve__ Observatory: |
| +``` |
| +[...]/runtime/observatory$ pub serve |
| +``` |
| + |
| +## Open Observatory |
| +You can open the development version of Observatory from |
| +Chrome/Chromium/__Dartium__ by navigating to [localhost:8080][open_observatory] |
| + |
| +Every change you make to the Observatory source code will be visible by simply |
| +__refreshing__ the page in the browser. |
| + |
| +## Connect to a VM |
| +Start a Dart VM with the ``--observe`` flag (as explained in the |
| +[get started guide][observatory_get_started]) and connect your Observatory instance to that VM. |
| + |
| +Example script (file name ```clock.dart```): |
| +``` |
| +import 'dart:async' show Timer, Duration; |
| + |
| +main() { |
| + bool tick = true; |
| + new Timer.periodic(const Duration(seconds: 1), (Timer t) { |
| + print(tick ? 'tick' : 'tock'); |
| + tick = !tick; |
| + }); |
| +} |
| +``` |
| +Start the script: |
| +``` |
| +$ dart --observe clock.dart |
| +``` |
| + |
| +## Code Reviews |
| +The development workflow of Dart (and Observatory) is based on code reviews. |
| + |
| +Follow the code review [instructions][code_review] to be able to successfully submit your |
| +code. |
| + |
| +The main reviewers for Observatory related CLs are: |
| + - turnidge |
| + - johnmccutchan |
| + - rmacnak |
| + |
| +## Write a new service test |
| +All the service tests are located in the ```tests/service``` folder. |
| +Test file names follow the convention ```<description>_test.dart``` |
| +(e.g. ```a_brief_description_test.dart```). |
| + |
| +The test is generally structured in the following way. |
| +```dart |
| +import 'package:test/test.dart'; |
| + |
| +main() { |
| + // Some code that you need to test. |
| + var a = 1 + 2; |
| + |
| + // Some assertions to check the results. |
| + expect(a, equal(3)); |
| +} |
| +``` |
| +See the official [test library][test_library] instructions; |
| + |
| +The ```test_helper.dart``` file expose some functions that allow to run a part |
| +of the code into another __VM__. |
| + |
| +To test synchronous operations: |
| +```dart |
| +import 'test_helper.dart'; |
| + |
| +code() { |
| + // Write the code you want to be execute into another VM. |
| +} |
| + |
| +var tests = [ |
| + // A series of tests that you want to run against the above code. |
| + (Isolate isolate) async { |
| + await isolate.reload(); |
| + // Use the isolate to communicate to the VM. |
| + } |
| +]; |
| + |
| +main(args) => runIsolateTestsSynchronous(args, |
| + tests, |
| + testeeConcurrent: code); |
| +``` |
| + |
| +In order to test asynchronous operations: |
| +```dart |
| +import 'test_helper.dart'; |
| + |
| +code() async{ |
|
Cutch
2016/06/21 20:02:07
missing space after async
cbernaschina
2016/06/21 21:52:15
Done.
|
| + // Write the asynchronous code you want to be execute into another VM. |
| +} |
| + |
| +var tests = [ |
| + // A series of tests that you want to run against the above code. |
| + (Isolate isolate) async { |
| + await isolate.reload(); |
| + // Use the isolate to communicate to the VM. |
| + } |
| +]; |
| + |
| +main(args) async => runIsolateTests(args, |
| + tests, |
| + testeeConcurrent: code); |
| +``` |
| + |
| +Both ```runIsolateTests``` and ```runIsolateTestsSynchronous``` have the |
| +following named parameters: |
| + - __testeeBefore__ (void()) a function that is going to be executed before |
| +the test |
| + - __testeeConcurrent__ (void()) test that is going to be executed |
| + - __pause_on_start__ (bool, default: false) pause the Isolate before the first |
| +instruction |
| + - __pause_on_exit__ (bool, default: false) pause the Isolate after the last |
| +instruction |
| + - __pause_on_unhandled_exceptions__ (bool, default: false) pause the Isolate at |
| +an unhandled exception |
| + - __trace_service__ (bool, default: false) trace VM service requests |
| + - __trace_compiler__ (bool, default: false) trace compiler operations |
| + - __verbose_vm__ (bool, default: false) verbose logging |
| + |
| + |
| +Some common and reusable test are available from ```service_test_common.dart```: |
| + - hasPausedFor |
| + - hasStoppedAtBreakpoint |
| + - hasStoppedWithUnhandledException |
| + - hasStoppedAtExit |
| + - hasPausedAtStartcode_review |
| +and utility functions: |
| + - subscribeToStream |
| + - cancelStreamSubscription |
| + - asyncStepOver |
| + - setBreakpointAtLine |
| + - resumeIsolate |
| + - resumeAndAwaitEvent |
| + - resumeIsolateAndAwaitEvent |
| + - stepOver |
| + - getClassFromRootLib |
| + - rootLibraryFieldValue |
| + |
| +## Run your tests |
| +See: __Run existing tests__ |
| + |
| +[build_sdk]: https://github.com/dart-lang/sdk/wiki/Building "Building the Dart SDK" |
| +[download_dartium]: https://www.dartlang.org/tools/dartium/ "Download Dartium" |
| +[build_dartium]: https://github.com/dart-lang/sdk/wiki/Building-Dartium "Build Dartium" |
| +[open_observatory]: http://localhost:8080/ "Open Observatory" |
| +[observatory_get_started]: https://dart-lang.github.io/observatory/get-started.html "Observatory get started" |
| +[code_review]: https://github.com/dart-lang/sdk/wiki/Code-review-workflow-with-GitHub-and-reitveld "Code Review" |
| +[test_library]: https://pub.dartlang.org/packages/test "Test Library" |