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

Side by Side Diff: third_party/pkg/route_hierarchical/test/client_test.dart

Issue 180843004: Revert revision 33053 (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
1 import 'dart:async'; 1 import 'dart:async';
2 import 'dart:html';
2 3
3 import 'package:unittest/unittest.dart'; 4 import 'package:unittest/unittest.dart';
4 import 'package:unittest/mock.dart'; 5 import 'package:unittest/mock.dart';
6 import 'package:unittest/html_enhanced_config.dart';
5 import 'package:route_hierarchical/client.dart'; 7 import 'package:route_hierarchical/client.dart';
6 import 'package:route_hierarchical/url_pattern.dart'; 8 import 'package:route_hierarchical/url_pattern.dart';
7 9
8 import 'mocks.dart'; 10 import 'mocks.dart';
9 11
10 main() { 12 main() {
11 unittestConfiguration.timeout = new Duration(seconds: 1); 13 useHtmlEnhancedConfiguration();
12 14
13 test('paths are routed to routes added with addRoute', () { 15 test('paths are routed to routes added with addRoute', () {
14 Router router = new Router(); 16 Router router = new Router();
15 router.root.addRoute( 17 router.root.addRoute(
16 name: 'foo', 18 name: 'foo',
17 path: '/foo', 19 path: '/foo',
18 enter: expectAsync1((RouteEvent e) { 20 enter: expectAsync1((RouteEvent e) {
19 expect(e.path, '/foo'); 21 expect(e.path, '/foo');
20 expect(router.root.getRoute('foo').isActive, isTrue);
21 })); 22 }));
22 return router.route('/foo'); 23 router.route('/foo');
23 }); 24 });
24 25
25 group('hierarchical routing', () { 26 group('hierarchical routing', () {
26 27
27 _testParentChild( 28 _testParentChild(
28 Pattern parentPath, 29 Pattern parentPath,
29 Pattern childPath, 30 Pattern childPath,
30 String expectedParentPath, 31 String expectedParentPath,
31 String expectedChildPath, 32 String expectedChildPath,
32 String testPath) { 33 String testPath) {
33 Router router = new Router(); 34 Router router = new Router();
34 router.root.addRoute( 35 router.root.addRoute(
35 name: 'parent', 36 name: 'parent',
36 path: parentPath, 37 path: parentPath,
37 enter: expectAsync1((RouteEvent e) { 38 enter: expectAsync1((RouteEvent e) {
38 expect(e.path, expectedParentPath); 39 expect(e.path, expectedParentPath);
39 expect(e.route, isNotNull);
40 expect(e.route.name, 'parent');
41 }), 40 }),
42 mount: (Route child) { 41 mount: (Route child) {
43 child.addRoute( 42 child.addRoute(
44 name: 'child', 43 name: 'child',
45 path: childPath, 44 path: childPath,
46 enter: expectAsync1((RouteEvent e) { 45 enter: expectAsync1((RouteEvent e) {
47 expect(e.path, expectedChildPath); 46 expect(e.path, expectedChildPath);
48 })); 47 }));
49 }); 48 });
50 router.route(testPath); 49 router.route(testPath);
(...skipping 16 matching lines...) Expand all
67 '/bar', 66 '/bar',
68 '/foo/bar'); 67 '/foo/bar');
69 }); 68 });
70 69
71 }); 70 });
72 71
73 group('leave', () { 72 group('leave', () {
74 73
75 test('should leave previous route and enter new', () { 74 test('should leave previous route and enter new', () {
76 Map<String, int> counters = <String, int>{ 75 Map<String, int> counters = <String, int>{
77 'fooPreEnter': 0,
78 'fooEnter': 0, 76 'fooEnter': 0,
79 'fooLeave': 0, 77 'fooLeave': 0,
80 'barPreEnter': 0,
81 'barEnter': 0, 78 'barEnter': 0,
82 'barLeave': 0, 79 'barLeave': 0,
83 'bazPreEnter': 0,
84 'bazEnter': 0, 80 'bazEnter': 0,
85 'bazLeave': 0 81 'bazLeave': 0
86 }; 82 };
87 Router router = new Router(); 83 Router router = new Router();
88 router.root 84 router.root
89 ..addRoute(path: '/foo', 85 ..addRoute(path: '/foo',
90 name: 'foo', 86 name: 'foo',
91 preEnter: (RouteEvent e) => counters['fooPreEnter']++,
92 enter: (RouteEvent e) => counters['fooEnter']++, 87 enter: (RouteEvent e) => counters['fooEnter']++,
93 leave: (RouteEvent e) => counters['fooLeave']++, 88 leave: (RouteEvent e) => counters['fooLeave']++,
94 mount: (Route route) => route 89 mount: (Route route) => route
95 ..addRoute(path: '/bar', 90 ..addRoute(path: '/bar',
96 name: 'bar', 91 name: 'bar',
97 preEnter: (RouteEvent e) => counters['barPreEnter']++,
98 enter: (RouteEvent e) => counters['barEnter']++, 92 enter: (RouteEvent e) => counters['barEnter']++,
99 leave: (RouteEvent e) => counters['barLeave']++) 93 leave: (RouteEvent e) => counters['barLeave']++)
100 ..addRoute(path: '/baz', 94 ..addRoute(path: '/baz',
101 name: 'baz', 95 name: 'baz',
102 preEnter: (RouteEvent e) => counters['bazPreEnter']++,
103 enter: (RouteEvent e) => counters['bazEnter']++, 96 enter: (RouteEvent e) => counters['bazEnter']++,
104 leave: (RouteEvent e) => counters['bazLeave']++)); 97 leave: (RouteEvent e) => counters['bazLeave']++));
105 98
106 expect(counters, { 99 expect(counters, {
107 'fooPreEnter': 0,
108 'fooEnter': 0, 100 'fooEnter': 0,
109 'fooLeave': 0, 101 'fooLeave': 0,
110 'barPreEnter': 0,
111 'barEnter': 0, 102 'barEnter': 0,
112 'barLeave': 0, 103 'barLeave': 0,
113 'bazPreEnter': 0,
114 'bazEnter': 0, 104 'bazEnter': 0,
115 'bazLeave': 0 105 'bazLeave': 0
116 }); 106 });
117 107
118 router.route('/foo/bar').then(expectAsync1((_) { 108 router.route('/foo/bar').then(expectAsync1((_) {
119 expect(counters, { 109 expect(counters, {
120 'fooPreEnter': 1,
121 'fooEnter': 1, 110 'fooEnter': 1,
122 'fooLeave': 0, 111 'fooLeave': 0,
123 'barPreEnter': 1,
124 'barEnter': 1, 112 'barEnter': 1,
125 'barLeave': 0, 113 'barLeave': 0,
126 'bazPreEnter': 0,
127 'bazEnter': 0, 114 'bazEnter': 0,
128 'bazLeave': 0 115 'bazLeave': 0
129 }); 116 });
130 117
131 router.route('/foo/baz').then(expectAsync1((_) { 118 router.route('/foo/baz').then(expectAsync1((_) {
132 expect(counters, { 119 expect(counters, {
133 'fooPreEnter': 1,
134 'fooEnter': 1, 120 'fooEnter': 1,
135 'fooLeave': 0, 121 'fooLeave': 0,
136 'barPreEnter': 1,
137 'barEnter': 1, 122 'barEnter': 1,
138 'barLeave': 1, 123 'barLeave': 1,
139 'bazPreEnter': 1,
140 'bazEnter': 1, 124 'bazEnter': 1,
141 'bazLeave': 0 125 'bazLeave': 0
142 }); 126 });
143 })); 127 }));
144 })); 128 }));
145 }); 129 });
146 130
147 _testAllowLeave(bool allowLeave) { 131 _testAllowLeave(bool allowLeave) {
148 Completer<bool> completer = new Completer<bool>(); 132 Completer<bool> completer = new Completer<bool>();
149 bool barEntered = false; 133 bool barEntered = false;
150 bool bazEntered = false; 134 bool bazEntered = false;
151 135
152 Router router = new Router(); 136 Router router = new Router();
153 router.root 137 router.root
154 ..addRoute(name: 'foo', path: '/foo', 138 ..addRoute(name: 'foo', path: '/foo',
155 mount: (Route child) => child 139 mount: (Route child) => child
156 ..addRoute(name: 'bar', path: '/bar', 140 ..addRoute(name: 'bar', path: '/bar',
157 enter: (RouteEnterEvent e) => barEntered = true, 141 enter: (RouteEvent e) => barEntered = true,
158 leave: (RouteLeaveEvent e) => e.allowLeave(completer.future)) 142 leave: (RouteEvent e) => e.allowLeave(completer.future))
159 ..addRoute(name: 'baz', path: '/baz', 143 ..addRoute(name: 'baz', path: '/baz',
160 enter: (RouteEnterEvent e) => bazEntered = true)); 144 enter: (RouteEvent e) => bazEntered = true));
161 145
162 router.route('/foo/bar').then(expectAsync1((_) { 146 router.route('/foo/bar').then(expectAsync1((_) {
163 expect(barEntered, true); 147 expect(barEntered, true);
164 expect(bazEntered, false); 148 expect(bazEntered, false);
165 router.route('/foo/baz').then(expectAsync1((_) { 149 router.route('/foo/baz').then(expectAsync1((_) {
166 expect(bazEntered, allowLeave); 150 expect(bazEntered, allowLeave);
167 })); 151 }));
168 completer.complete(allowLeave); 152 completer.complete(allowLeave);
169 })); 153 }));
170 } 154 }
171 155
172 test('should allow navigation', () { 156 test('should allow navigation', () {
173 _testAllowLeave(true); 157 _testAllowLeave(true);
174 }); 158 });
175 159
176 test('should veto navigation', () { 160 test('should veto navigation', () {
177 _testAllowLeave(false); 161 _testAllowLeave(false);
178 }); 162 });
179 }); 163 });
180 164
181 group('preEnter', () {
182
183 _testAllowEnter(bool allowEnter) {
184 Completer<bool> completer = new Completer<bool>();
185 bool barEntered = false;
186
187 Router router = new Router();
188 router.root
189 ..addRoute(name: 'foo', path: '/foo',
190 mount: (Route child) => child
191 ..addRoute(name: 'bar', path: '/bar',
192 enter: (RouteEnterEvent e) => barEntered = true,
193 preEnter: (RoutePreEnterEvent e) =>
194 e.allowEnter(completer.future)));
195
196 router.route('/foo/bar').then(expectAsync1((_) {
197 expect(barEntered, allowEnter);
198 }));
199 completer.complete(allowEnter);
200 }
201
202 test('should allow navigation', () {
203 _testAllowEnter(true);
204 });
205
206 test('should veto navigation', () {
207 _testAllowEnter(false);
208 });
209 });
210
211 group('Default route', () { 165 group('Default route', () {
212 166
213 _testHeadTail(String path, String expectFoo, String expectBar) { 167 _testHeadTail(String path, String expectFoo, String expectBar) {
214 Router router = new Router(); 168 Router router = new Router();
215 router.root 169 router.root
216 ..addRoute( 170 ..addRoute(
217 name: 'foo', 171 name: 'foo',
218 path: '/foo', 172 path: '/foo',
219 defaultRoute: true, 173 defaultRoute: true,
220 enter: expectAsync1((RouteEvent e) { 174 enter: expectAsync1((RouteEvent e) {
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 }); 674 });
721 }); 675 });
722 }); 676 });
723 677
724 }); 678 });
725 679
726 } 680 }
727 681
728 /// An alias for Router.root.getRoute(path) 682 /// An alias for Router.root.getRoute(path)
729 r(Router router, String path) => router.root.getRoute(path); 683 r(Router router, String path) => router.root.getRoute(path);
OLDNEW
« no previous file with comments | « third_party/pkg/route_hierarchical/pubspec.yaml ('k') | third_party/pkg/route_hierarchical/test/url_template_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698