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