| OLD | NEW |
| 1 library ng_specs; | 1 library ng_specs; |
| 2 | 2 |
| 3 | |
| 4 import 'dart:html'; | 3 import 'dart:html'; |
| 5 import 'dart:mirrors' as mirror; | |
| 6 import 'package:unittest/unittest.dart' as unit; | 4 import 'package:unittest/unittest.dart' as unit; |
| 7 import 'package:angular/angular.dart'; | 5 import 'package:angular/angular.dart'; |
| 8 import 'package:angular/mock/module.dart'; | 6 import 'package:angular/mock/module.dart'; |
| 7 import 'package:collection/wrappers.dart' show DelegatingList; |
| 9 | 8 |
| 10 import 'jasmine_syntax.dart'; | 9 import 'jasmine_syntax.dart'; |
| 11 | 10 |
| 12 export 'dart:html'; | 11 export 'dart:html'; |
| 13 export 'jasmine_syntax.dart' hide main; | 12 export 'jasmine_syntax.dart' hide main; |
| 14 export 'package:unittest/unittest.dart'; | 13 export 'package:unittest/unittest.dart'; |
| 15 export 'package:unittest/mock.dart'; | 14 export 'package:unittest/mock.dart'; |
| 16 export 'package:di/dynamic_injector.dart'; | 15 export 'package:di/dynamic_injector.dart'; |
| 17 export 'package:angular/angular.dart'; | 16 export 'package:angular/angular.dart'; |
| 18 export 'package:angular/mock/module.dart'; | 17 export 'package:angular/mock/module.dart'; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 toHaveBeenCalledOnceWith([a,b,c,d,e,f]) => | 76 toHaveBeenCalledOnceWith([a,b,c,d,e,f]) => |
| 78 unit.expect(actual.count == 1 && actual.firstArgsMatch(a,b,c,d,e,f), | 77 unit.expect(actual.count == 1 && actual.firstArgsMatch(a,b,c,d,e,f), |
| 79 true, | 78 true, |
| 80 reason: 'method invoked once with correct arguments. (Called ${
actual.count} times)'); | 79 reason: 'method invoked once with correct arguments. (Called ${
actual.count} times)'); |
| 81 | 80 |
| 82 toHaveClass(cls) => unit.expect(actual.classes.contains(cls), true, reason: '
Expected ${actual} to have css class ${cls}'); | 81 toHaveClass(cls) => unit.expect(actual.classes.contains(cls), true, reason: '
Expected ${actual} to have css class ${cls}'); |
| 83 | 82 |
| 84 toEqualSelect(options) { | 83 toEqualSelect(options) { |
| 85 var actualOptions = []; | 84 var actualOptions = []; |
| 86 | 85 |
| 87 for(var option in actual.querySelectorAll('option')) { | 86 for (var option in actual.querySelectorAll('option')) { |
| 88 if (option.selected) { | 87 if (option.selected) { |
| 89 actualOptions.add([option.value]); | 88 actualOptions.add([option.value]); |
| 90 } else { | 89 } else { |
| 91 actualOptions.add(option.value); | 90 actualOptions.add(option.value); |
| 92 } | 91 } |
| 93 } | 92 } |
| 94 return unit.expect(actualOptions, options); | 93 return unit.expect(actualOptions, options); |
| 95 } | 94 } |
| 96 | 95 |
| 97 toEqualValid() { | 96 toEqualValid() { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 111 class NotExpect { | 110 class NotExpect { |
| 112 Expect expect; | 111 Expect expect; |
| 113 get actual => expect.actual; | 112 get actual => expect.actual; |
| 114 NotExpect(this.expect); | 113 NotExpect(this.expect); |
| 115 | 114 |
| 116 toHaveBeenCalled() => unit.expect(actual.called, false, reason: 'method called
'); | 115 toHaveBeenCalled() => unit.expect(actual.called, false, reason: 'method called
'); |
| 117 toThrow() => actual(); | 116 toThrow() => actual(); |
| 118 | 117 |
| 119 toHaveClass(cls) => unit.expect(actual.classes.contains(cls), false, reason: '
Expected ${actual} to not have css class ${cls}'); | 118 toHaveClass(cls) => unit.expect(actual.classes.contains(cls), false, reason: '
Expected ${actual} to not have css class ${cls}'); |
| 120 toBe(expected) => unit.expect(actual, | 119 toBe(expected) => unit.expect(actual, |
| 121 unit.predicate((actual) => !identical(expected, actual), '$expected')); | 120 unit.predicate((actual) => !identical(expected, actual), 'not $expected'))
; |
| 122 toEqual(expected) => unit.expect(actual, | 121 toEqual(expected) => unit.expect(actual, |
| 123 unit.predicate((actual) => expected != actual, '$expected')); | 122 unit.predicate((actual) => expected != actual, 'not $expected')); |
| 124 toContain(expected) => unit.expect(actual, | 123 toContain(expected) => unit.expect(actual, |
| 125 unit.predicate((actual) => !actual.contains(expected), '$expected')); | 124 unit.predicate((actual) => !actual.contains(expected), 'not $expected')); |
| 126 } | 125 } |
| 127 | 126 |
| 128 class ExceptionContains extends unit.Matcher { | 127 class ExceptionContains extends unit.Matcher { |
| 129 | 128 |
| 130 final _expected; | 129 final _expected; |
| 131 | 130 |
| 132 const ExceptionContains(this._expected); | 131 const ExceptionContains(this._expected); |
| 133 | 132 |
| 134 bool matches(item, Map matchState) { | 133 bool matches(item, Map matchState) { |
| 135 if (item is String) { | 134 if (item is String) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 152 return new JQuery(selector); | 151 return new JQuery(selector); |
| 153 } | 152 } |
| 154 | 153 |
| 155 | 154 |
| 156 class GetterSetter { | 155 class GetterSetter { |
| 157 Getter getter(String key) => null; | 156 Getter getter(String key) => null; |
| 158 Setter setter(String key) => null; | 157 Setter setter(String key) => null; |
| 159 } | 158 } |
| 160 var getterSetter = new GetterSetter(); | 159 var getterSetter = new GetterSetter(); |
| 161 | 160 |
| 162 class JQuery implements List<Node> { | 161 class JQuery extends DelegatingList<Node> { |
| 163 List<Node> _list = []; | 162 JQuery([selector]) : super([]) { |
| 164 | |
| 165 JQuery([selector]) { | |
| 166 if (selector == null) { | 163 if (selector == null) { |
| 167 // do nothing; | 164 // do nothing; |
| 168 } else if (selector is String) { | 165 } else if (selector is String) { |
| 169 _list.addAll(es(selector)); | 166 addAll(es(selector)); |
| 170 } else if (selector is List) { | 167 } else if (selector is List) { |
| 171 _list.addAll(selector); | 168 addAll(selector); |
| 172 } else if (selector is Node) { | 169 } else if (selector is Node) { |
| 173 add(selector); | 170 add(selector); |
| 174 } else { | 171 } else { |
| 175 throw selector; | 172 throw selector; |
| 176 } | 173 } |
| 177 } | 174 } |
| 178 | 175 |
| 179 noSuchMethod(Invocation invocation) => mirror.reflect(_list).delegate(invocati
on); | |
| 180 | |
| 181 _toHtml(node, [bool outer = false]) { | 176 _toHtml(node, [bool outer = false]) { |
| 182 if (node is Comment) { | 177 if (node is Comment) { |
| 183 return '<!--${node.text}-->'; | 178 return '<!--${node.text}-->'; |
| 184 } else { | 179 } else { |
| 185 return outer ? node.outerHtml : node.innerHtml; | 180 return outer ? node.outerHtml : node.innerHtml; |
| 186 } | 181 } |
| 187 } | 182 } |
| 188 | 183 |
| 189 accessor(Function getter, Function setter, [value, single=false]) { | 184 accessor(Function getter, Function setter, [value, single=false]) { |
| 190 // TODO(dart): ?value does not work, since value was passed. :-( | 185 // TODO(dart): ?value does not work, since value was passed. :-( |
| 191 var setterMode = value != null; | 186 var setterMode = value != null; |
| 192 var result = setterMode ? this : ''; | 187 var result = setterMode ? this : ''; |
| 193 _list.forEach((node) { | 188 forEach((node) { |
| 194 if (setterMode) { | 189 if (setterMode) { |
| 195 setter(node, value); | 190 setter(node, value); |
| 196 } else { | 191 } else { |
| 197 result = single ? getter(node) : '$result${getter(node)}'; | 192 result = single ? getter(node) : '$result${getter(node)}'; |
| 198 } | 193 } |
| 199 }); | 194 }); |
| 200 return result; | 195 return result; |
| 201 } | 196 } |
| 202 | 197 |
| 203 html([String html]) => accessor( | 198 html([String html]) => accessor( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 218 prop([String name]) => accessor( | 213 prop([String name]) => accessor( |
| 219 (n) => getterSetter.getter(name)(n), | 214 (n) => getterSetter.getter(name)(n), |
| 220 (n, v) => getterSetter.setter(name)(n, v), | 215 (n, v) => getterSetter.setter(name)(n, v), |
| 221 null, | 216 null, |
| 222 true); | 217 true); |
| 223 textWithShadow() => fold('', (t, n) => '${t}${renderedText(n)}'); | 218 textWithShadow() => fold('', (t, n) => '${t}${renderedText(n)}'); |
| 224 find(selector) => fold(new JQuery(), (jq, n) => jq..addAll( | 219 find(selector) => fold(new JQuery(), (jq, n) => jq..addAll( |
| 225 (n is Element ? (n as Element).querySelectorAll(selector) : []))); | 220 (n is Element ? (n as Element).querySelectorAll(selector) : []))); |
| 226 hasClass(String name) => fold(false, (hasClass, node) => | 221 hasClass(String name) => fold(false, (hasClass, node) => |
| 227 hasClass || (node is Element && (node as Element).classes.contains(name)))
; | 222 hasClass || (node is Element && (node as Element).classes.contains(name)))
; |
| 228 addClass(String name) => _list.forEach((node) => | 223 addClass(String name) => forEach((node) => |
| 229 (node is Element) ? (node as Element).classes.add(name) : null); | 224 (node is Element) ? (node as Element).classes.add(name) : null); |
| 230 removeClass(String name) => _list.forEach((node) => | 225 removeClass(String name) => forEach((node) => |
| 231 (node is Element) ? (node as Element).classes.remove(name) : null); | 226 (node is Element) ? (node as Element).classes.remove(name) : null); |
| 232 css(String name, [String value]) => accessor( | 227 css(String name, [String value]) => accessor( |
| 233 (Element n) => n.style.getPropertyValue(name), | 228 (Element n) => n.style.getPropertyValue(name), |
| 234 (Element n, v) => n.style.setProperty(name, value), value); | 229 (Element n, v) => n.style.setProperty(name, value), value); |
| 235 children() => new JQuery(this[0].childNodes); | 230 children() => new JQuery(this[0].childNodes); |
| 236 } | 231 } |
| 237 | 232 |
| 238 | 233 |
| 239 main() { | 234 main() { |
| 240 beforeEach(setUpInjector); | 235 beforeEach(setUpInjector); |
| 241 beforeEach(() => wrapFn(sync)); | 236 beforeEach(() => wrapFn(sync)); |
| 242 afterEach(tearDownInjector); | 237 afterEach(tearDownInjector); |
| 243 } | 238 } |
| OLD | NEW |