Index: README.md |
diff --git a/README.md b/README.md |
index 4dc8c02e38f8731fd2b2e36e8a27cfd87e882ff6..19b3482d593f2ba440c0d6bbeb645748308b9689 100644 |
--- a/README.md |
+++ b/README.md |
@@ -95,6 +95,77 @@ the results will be reported on the command line just like for VM tests. In |
fact, you can even run tests on both platforms with a single command: `pub run |
unittest:unittest -p chrome -p vm path/to/test.dart`. |
+### Restricting Tests to Certain Platforms |
+ |
+Some test files only make sense to run on particular platforms. They may use |
+`dart:html` or `dart:io`, they might test Windows' particular filesystem |
+behavior, or they might use a feature that's only available in Chrome. The |
+[`@TestOn`][TestOn] annotation makes it easy to declare exactly which platforms |
+a test file should run on. Just put it at the top of your file, before any |
+`library` or `import` declarations: |
+ |
+```dart |
+@TestOn("vm") |
+ |
+import "dart:io"; |
+ |
+import "package:unittest/unittest.dart"; |
+ |
+void main() { |
+ // ... |
+} |
+``` |
+ |
+[TestOn]: http://www.dartdocs.org/documentation/unittest/latest/index.html#unittest/unittest.TestOn |
+ |
+The string you pass to `@TestOn` is what's called a "platform selector", and it |
+specifies exactly which platforms a test can run on. It can be as simple as the |
+name of a platform, or a more complex Dart-like boolean expression involving |
+these platform names. |
+ |
+### Platform Selector Syntax |
+ |
+Platform selectors can contain identifiers, parentheses, and operators. When |
+loading a test, each identifier is set to `true` or `false` based on the current |
+platform, and the test is only loaded if the platform selector returns `true`. |
+The operators `||`, `&&`, `!`, and `? :` all work just like they do in Dart. The |
+valid identifiers are: |
+ |
+* `vm`: Whether the test is running on the command-line Dart VM. |
+ |
+* `chrome`: Whether the test is running on Google Chrome. |
+ |
+* `dart-vm`: Whether the test is running on the Dart VM in any context. For now |
+ this is identical to `vm`, but it will also be true for Dartium in the future. |
+ It's identical to `!js`. |
+ |
+* `browser`: Whether the test is running in any browser. |
+ |
+* `js`: Whether the test has been compiled to JS. This is identical to |
+ `!dart-vm`. |
+ |
+* `blink`: Whether the test is running in a browser that uses the Blink |
+ rendering engine. |
+ |
+* `windows`: Whether the test is running on Windows. If `vm` is false, this will |
+ be `false` as well. |
+ |
+* `mac-os`: Whether the test is running on Mac OS. If `vm` is false, this will |
+ be `false` as well. |
+ |
+* `linux`: Whether the test is running on Linux. If `vm` is false, this will be |
+ `false` as well. |
+ |
+* `android`: Whether the test is running on Android. If `vm` is false, this will |
+ be `false` as well, which means that this *won't* be true if the test is |
+ running on an Android browser. |
+ |
+* `posix`: Whether the test is running on a POSIX operating system. This is |
+ equivalent to `!windows`. |
+ |
+For example, if you wanted to run a test on every browser but Chrome, you would |
+write `@TestOn("browser && !chrome")`. |
+ |
## Asynchronous Tests |
Tests written with `async`/`await` will work automatically. The test runner |