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