Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(379)

Side by Side Diff: lib/src/backend/platform_selector.dart

Issue 1036943002: Add a testOn parameter to test() and group(). (Closed) Base URL: git@github.com:dart-lang/unittest@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/src/backend/metadata.dart ('k') | lib/src/backend/suite.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library unittest.backend.platform_selector; 5 library unittest.backend.platform_selector;
6 6
7 import 'package:source_span/source_span.dart'; 7 import 'package:source_span/source_span.dart';
8 8
9 import 'operating_system.dart'; 9 import 'operating_system.dart';
10 import 'platform_selector/ast.dart'; 10 import 'platform_selector/ast.dart';
(...skipping 26 matching lines...) Expand all
37 /// 37 ///
38 /// This will throw a [SourceSpanFormatException] if the selector is 38 /// This will throw a [SourceSpanFormatException] if the selector is
39 /// malformed or if it uses an undefined variable. 39 /// malformed or if it uses an undefined variable.
40 factory PlatformSelector.parse(String selector) => 40 factory PlatformSelector.parse(String selector) =>
41 new _PlatformSelector.parse(selector); 41 new _PlatformSelector.parse(selector);
42 42
43 /// Returns whether the selector matches the given [platform] and [os]. 43 /// Returns whether the selector matches the given [platform] and [os].
44 /// 44 ///
45 /// [os] defaults to [OperatingSystem.none]. 45 /// [os] defaults to [OperatingSystem.none].
46 bool evaluate(TestPlatform platform, {OperatingSystem os}); 46 bool evaluate(TestPlatform platform, {OperatingSystem os});
47
48 /// Returns a new [PlatformSelector] that matches only platforms matched by
49 /// both [this] and [other].
50 PlatformSelector intersect(PlatformSelector other);
47 } 51 }
48 52
49 /// The concrete implementation of a [PlatformSelector] parsed from a string. 53 /// The concrete implementation of a [PlatformSelector] parsed from a string.
50 /// 54 ///
51 /// This is separate from [PlatformSelector] so that [_AllPlatforms] can 55 /// This is separate from [PlatformSelector] so that [_AllPlatforms] can
52 /// implement [PlatformSelector] without having to implement private members. 56 /// implement [PlatformSelector] without having to implement private members.
53 class _PlatformSelector implements PlatformSelector{ 57 class _PlatformSelector implements PlatformSelector{
54 /// The parsed AST. 58 /// The parsed AST.
55 final Node _selector; 59 final Node _selector;
56 60
57 _PlatformSelector.parse(String selector) 61 _PlatformSelector.parse(String selector)
58 : _selector = new Parser(selector).parse() { 62 : _selector = new Parser(selector).parse() {
59 _selector.accept(const _VariableValidator()); 63 _selector.accept(const _VariableValidator());
60 } 64 }
61 65
62 _PlatformSelector(this._selector); 66 _PlatformSelector(this._selector);
63 67
64 bool evaluate(TestPlatform platform, {OperatingSystem os}) => 68 bool evaluate(TestPlatform platform, {OperatingSystem os}) =>
65 _selector.accept(new Evaluator(platform, os: os)); 69 _selector.accept(new Evaluator(platform, os: os));
66 70
71 PlatformSelector intersect(PlatformSelector other) {
72 if (other == PlatformSelector.all) return this;
73 return new _PlatformSelector(new AndNode(
74 _selector, (other as _PlatformSelector)._selector));
75 }
76
67 String toString() => _selector.toString(); 77 String toString() => _selector.toString();
68 } 78 }
69 79
70 /// A selector that matches all platforms. 80 /// A selector that matches all platforms.
71 class _AllPlatforms implements PlatformSelector { 81 class _AllPlatforms implements PlatformSelector {
72 const _AllPlatforms(); 82 const _AllPlatforms();
73 83
74 bool evaluate(TestPlatform platform, {OperatingSystem os}) => true; 84 bool evaluate(TestPlatform platform, {OperatingSystem os}) => true;
75 85
86 PlatformSelector intersect(PlatformSelector other) => other;
87
76 String toString() => "*"; 88 String toString() => "*";
77 } 89 }
78 90
79 /// An AST visitor that ensures that all variables are valid. 91 /// An AST visitor that ensures that all variables are valid.
80 /// 92 ///
81 /// This isn't done when evaluating to ensure that errors are eagerly detected, 93 /// This isn't done when evaluating to ensure that errors are eagerly detected,
82 /// and it isn't done when parsing to avoid coupling the syntax too tightly to 94 /// and it isn't done when parsing to avoid coupling the syntax too tightly to
83 /// the semantics. 95 /// the semantics.
84 class _VariableValidator extends RecursiveVisitor { 96 class _VariableValidator extends RecursiveVisitor {
85 const _VariableValidator(); 97 const _VariableValidator();
86 98
87 void visitVariable(VariableNode node) { 99 void visitVariable(VariableNode node) {
88 if (_validVariables.contains(node.name)) return; 100 if (_validVariables.contains(node.name)) return;
89 throw new SourceSpanFormatException("Undefined variable.", node.span); 101 throw new SourceSpanFormatException("Undefined variable.", node.span);
90 } 102 }
91 } 103 }
OLDNEW
« no previous file with comments | « lib/src/backend/metadata.dart ('k') | lib/src/backend/suite.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698