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

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

Issue 1093633004: Add test- and group-level support for skipping tests. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Code review changes Created 5 years, 8 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/declarer.dart ('k') | lib/src/runner/engine.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 test.backend.metadata; 5 library test.backend.metadata;
6 6
7 import '../frontend/timeout.dart'; 7 import '../frontend/timeout.dart';
8 import 'platform_selector.dart'; 8 import 'platform_selector.dart';
9 9
10 /// Metadata for a test or test suite. 10 /// Metadata for a test or test suite.
11 /// 11 ///
12 /// This metadata comes from declarations on the test itself; it doesn't include 12 /// This metadata comes from declarations on the test itself; it doesn't include
13 /// configuration from the user. 13 /// configuration from the user.
14 class Metadata { 14 class Metadata {
15 /// The selector indicating which platforms the suite supports. 15 /// The selector indicating which platforms the suite supports.
16 final PlatformSelector testOn; 16 final PlatformSelector testOn;
17 17
18 /// The modification to the timeout for the test or suite. 18 /// The modification to the timeout for the test or suite.
19 final Timeout timeout; 19 final Timeout timeout;
20 20
21 /// Whether the test or suite should be skipped.
22 final bool skip;
23
24 /// The reason the test or suite should be skipped, if given.
25 final String skipReason;
26
21 /// Creates new Metadata. 27 /// Creates new Metadata.
22 /// 28 ///
23 /// [testOn] defaults to [PlatformSelector.all]. 29 /// [testOn] defaults to [PlatformSelector.all].
24 Metadata({PlatformSelector testOn, Timeout timeout}) 30 Metadata({PlatformSelector testOn, Timeout timeout, bool skip: false,
31 this.skipReason})
25 : testOn = testOn == null ? PlatformSelector.all : testOn, 32 : testOn = testOn == null ? PlatformSelector.all : testOn,
26 timeout = timeout == null ? const Timeout.factor(1) : timeout; 33 timeout = timeout == null ? const Timeout.factor(1) : timeout,
34 skip = skip;
27 35
28 /// Creates a new Metadata, but with fields parsed from strings where 36 /// Creates a new Metadata, but with fields parsed from strings where
29 /// applicable. 37 /// applicable.
30 /// 38 ///
31 /// Throws a [FormatException] if any field is invalid. 39 /// Throws a [FormatException] if any field is invalid.
32 Metadata.parse({String testOn, Timeout timeout}) 40 Metadata.parse({String testOn, Timeout timeout, skip})
33 : this( 41 : testOn = testOn == null
34 testOn: testOn == null ? null : new PlatformSelector.parse(testOn), 42 ? PlatformSelector.all
35 timeout: timeout); 43 : new PlatformSelector.parse(testOn),
44 timeout = timeout == null ? const Timeout.factor(1) : timeout,
45 skip = skip != null && skip != false,
46 skipReason = skip is String ? skip : null {
47 if (skip != null && skip is! String && skip is! bool) {
48 throw new ArgumentError(
49 '"skip" must be a String or a bool, was "$skip".');
50 }
51 }
36 52
37 /// Dezerializes the result of [Metadata.serialize] into a new [Metadata]. 53 /// Dezerializes the result of [Metadata.serialize] into a new [Metadata].
38 Metadata.deserialize(serialized) 54 Metadata.deserialize(serialized)
39 : this.parse( 55 : this.parse(
40 testOn: serialized['testOn'], 56 testOn: serialized['testOn'],
41 timeout: serialized['timeout']['duration'] == null 57 timeout: serialized['timeout']['duration'] == null
42 ? new Timeout.factor(serialized['timeout']['scaleFactor']) 58 ? new Timeout.factor(serialized['timeout']['scaleFactor'])
43 : new Timeout(new Duration( 59 : new Timeout(new Duration(
44 microseconds: serialized['timeout']['duration']))); 60 microseconds: serialized['timeout']['duration'])),
61 skip: serialized['skipReason'] == null
62 ? serialized['skip']
63 : serialized['skipReason']);
45 64
46 /// Return a new [Metadata] that merges [this] with [other]. 65 /// Return a new [Metadata] that merges [this] with [other].
47 /// 66 ///
48 /// If the two [Metadata]s have conflicting properties, [other] wins. 67 /// If the two [Metadata]s have conflicting properties, [other] wins.
49 Metadata merge(Metadata other) => 68 Metadata merge(Metadata other) =>
50 new Metadata( 69 new Metadata(
51 testOn: testOn.intersect(other.testOn), 70 testOn: testOn.intersect(other.testOn),
52 timeout: timeout.merge(other.timeout)); 71 timeout: timeout.merge(other.timeout),
72 skip: skip || other.skip,
73 skipReason: other.skipReason == null ? skipReason : other.skipReason);
53 74
54 /// Serializes [this] into a JSON-safe object that can be deserialized using 75 /// Serializes [this] into a JSON-safe object that can be deserialized using
55 /// [new Metadata.deserialize]. 76 /// [new Metadata.deserialize].
56 serialize() => { 77 serialize() => {
57 'testOn': testOn == PlatformSelector.all ? null : testOn.toString(), 78 'testOn': testOn == PlatformSelector.all ? null : testOn.toString(),
58 'timeout': { 79 'timeout': {
59 'duration': timeout.duration == null 80 'duration': timeout.duration == null
60 ? null 81 ? null
61 : timeout.duration.inMicroseconds, 82 : timeout.duration.inMicroseconds,
62 'scaleFactor': timeout.scaleFactor 83 'scaleFactor': timeout.scaleFactor
63 } 84 },
85 'skip': skip,
86 'skipReason': skipReason
64 }; 87 };
65 } 88 }
OLDNEW
« no previous file with comments | « lib/src/backend/declarer.dart ('k') | lib/src/runner/engine.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698