OLD | NEW |
1 part of unittest; | 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library unittest.group_context; |
| 6 |
| 7 import 'dart:async'; |
| 8 |
| 9 import '../unittest.dart'; |
2 | 10 |
3 /// Setup and teardown functions for a group and its parents, the latter | 11 /// Setup and teardown functions for a group and its parents, the latter |
4 /// for chaining. | 12 /// for chaining. |
5 class _GroupContext { | 13 class GroupContext { |
6 final _GroupContext parent; | 14 /// The parent context, or `null`. |
| 15 final GroupContext parent; |
| 16 |
| 17 /// Whether this is the root context. |
| 18 bool get isRoot => parent == null; |
7 | 19 |
8 /// Description text of the current test group. | 20 /// Description text of the current test group. |
9 final String _name; | 21 final String _name; |
10 | 22 |
11 /// Setup function called before each test in a group. | 23 /// The set-up function called before each test in a group. |
12 Function _testSetup; | 24 Function get testSetUp => _testSetUp; |
| 25 Function _testSetUp; |
13 | 26 |
14 get testSetup => _testSetup; | 27 set testSetUp(Function setUp) { |
| 28 if (parent == null || parent.testSetUp == null) { |
| 29 _testSetUp = setUp; |
| 30 return; |
| 31 } |
15 | 32 |
16 get parentSetup => (parent == null) ? null : parent.testSetup; | 33 _testSetUp = () { |
17 | 34 var f = parent.testSetUp(); |
18 set testSetup(Function setup) { | 35 if (f is Future) { |
19 var preSetup = parentSetup; | 36 return f.then((_) => setUp()); |
20 if (preSetup == null) { | 37 } else { |
21 _testSetup = setup; | 38 return setUp(); |
22 } else { | 39 } |
23 _testSetup = () { | 40 }; |
24 var f = preSetup(); | |
25 if (f is Future) { | |
26 return f.then((_) => setup()); | |
27 } else { | |
28 return setup(); | |
29 } | |
30 }; | |
31 } | |
32 } | 41 } |
33 | 42 |
34 /// Teardown function called after each test in a group. | 43 /// The tear-down function called after each test in a group. |
35 Function _testTeardown; | 44 Function get testTearDown => _testTearDown; |
| 45 Function _testTearDown; |
36 | 46 |
37 get testTeardown => _testTeardown; | 47 set testTearDown(Function tearDown) { |
| 48 if (parent == null || parent.testTearDown == null) { |
| 49 _testTearDown = tearDown; |
| 50 return; |
| 51 } |
38 | 52 |
39 get parentTeardown => (parent == null) ? null : parent.testTeardown; | 53 _testTearDown = () { |
40 | 54 var f = tearDown(); |
41 set testTeardown(Function teardown) { | 55 if (f is Future) { |
42 var postTeardown = parentTeardown; | 56 return f.then((_) => parent.testTearDown()); |
43 if (postTeardown == null) { | 57 } else { |
44 _testTeardown = teardown; | 58 return parent.testTearDown(); |
45 } else { | 59 } |
46 _testTeardown = () { | 60 }; |
47 var f = teardown(); | |
48 if (f is Future) { | |
49 return f.then((_) => postTeardown()); | |
50 } else { | |
51 return postTeardown(); | |
52 } | |
53 }; | |
54 } | |
55 } | 61 } |
56 | 62 |
57 String get fullName => (parent == null || parent == _environment.rootContext) | 63 /// Returns the fully-qualified name of this context. |
58 ? _name | 64 String get fullName => |
59 : "${parent.fullName}$groupSep$_name"; | 65 (isRoot || parent.isRoot) ? _name : "${parent.fullName}$groupSep$_name"; |
60 | 66 |
61 _GroupContext([this.parent, this._name = '']) { | 67 GroupContext.root() |
62 _testSetup = parentSetup; | 68 : parent = null, |
63 _testTeardown = parentTeardown; | 69 _name = ''; |
| 70 |
| 71 GroupContext(this.parent, this._name) { |
| 72 _testSetUp = parent.testSetUp; |
| 73 _testTearDown = parent.testTearDown; |
64 } | 74 } |
65 } | 75 } |
OLD | NEW |