fix(test_lib): support multi matches with deep equality for function calls
This commit is contained in:
parent
623edcd2d8
commit
f78406392b
|
@ -18,6 +18,8 @@ import 'package:angular2/src/facade/collection.dart' show StringMapWrapper;
|
||||||
import './test_injector.dart';
|
import './test_injector.dart';
|
||||||
export './test_injector.dart' show inject;
|
export './test_injector.dart' show inject;
|
||||||
|
|
||||||
|
import 'package:collection/equality.dart';
|
||||||
|
|
||||||
bool IS_DARTIUM = true;
|
bool IS_DARTIUM = true;
|
||||||
|
|
||||||
List _testBindings = [];
|
List _testBindings = [];
|
||||||
|
@ -76,6 +78,8 @@ Expect expect(actual, [matcher]) {
|
||||||
return expect;
|
return expect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const _u = null;
|
||||||
|
|
||||||
class Expect extends gns.Expect {
|
class Expect extends gns.Expect {
|
||||||
Expect(actual) : super(actual);
|
Expect(actual) : super(actual);
|
||||||
|
|
||||||
|
@ -87,7 +91,32 @@ class Expect extends gns.Expect {
|
||||||
void toImplement(expected) => toBeA(expected);
|
void toImplement(expected) => toBeA(expected);
|
||||||
void toBeNaN() => _expect(double.NAN.compareTo(actual) == 0, equals(true));
|
void toBeNaN() => _expect(double.NAN.compareTo(actual) == 0, equals(true));
|
||||||
void toHaveText(expected) => _expect(elementText(actual), expected);
|
void toHaveText(expected) => _expect(elementText(actual), expected);
|
||||||
|
void toHaveBeenCalledWith([a = _u, b = _u, c = _u, d = _u, e = _u, f = _u]) =>
|
||||||
|
_expect(_argsMatch(actual, a, b, c, d, e, f), true, reason: 'method invoked with correct arguments');
|
||||||
Function get _expect => gns.guinness.matchers.expect;
|
Function get _expect => gns.guinness.matchers.expect;
|
||||||
|
|
||||||
|
// TODO(tbosch): move this hack into Guinness
|
||||||
|
_argsMatch(spyFn, [a0 = _u, a1 = _u, a2 = _u, a3 = _u, a4 = _u, a5 = _u]) {
|
||||||
|
var calls = spyFn.calls;
|
||||||
|
final toMatch = _takeDefined([a0, a1, a2, a3, a4, a5]);
|
||||||
|
if (calls.isEmpty) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
gns.SamePropsMatcher matcher = new gns.SamePropsMatcher(toMatch);
|
||||||
|
for (var i=0; i<calls.length; i++) {
|
||||||
|
var call = calls[i];
|
||||||
|
// TODO: create a better error message, not just 'Expected: <true> Actual: <false>'.
|
||||||
|
// For hacking this is good:
|
||||||
|
// print(call.positionalArguments);
|
||||||
|
if (matcher.matches(call.positionalArguments, null)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List _takeDefined(List iter) => iter.takeWhile((_) => _ != _u).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
class NotExpect extends gns.NotExpect {
|
class NotExpect extends gns.NotExpect {
|
||||||
|
|
|
@ -10,6 +10,9 @@ class TestObj {
|
||||||
someFunc():number {
|
someFunc():number {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
someComplexFunc(a) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@proxy
|
@proxy
|
||||||
|
@ -80,6 +83,18 @@ export function main() {
|
||||||
expect(spyObj.spy("someFunc")).toHaveBeenCalledWith(1,2);
|
expect(spyObj.spy("someFunc")).toHaveBeenCalledWith(1,2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should match multiple function calls", () => {
|
||||||
|
spyObj.someFunc(1,2);
|
||||||
|
spyObj.someFunc(3,4);
|
||||||
|
expect(spyObj.spy("someFunc")).toHaveBeenCalledWith(1,2);
|
||||||
|
expect(spyObj.spy("someFunc")).toHaveBeenCalledWith(3,4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should match using deep equality", () => {
|
||||||
|
spyObj.someComplexFunc([1]);
|
||||||
|
expect(spyObj.spy("someComplexFunc")).toHaveBeenCalledWith([1]);
|
||||||
|
});
|
||||||
|
|
||||||
it("should support stubs", () => {
|
it("should support stubs", () => {
|
||||||
var s = SpyObject.stub({"a":1}, {"b":2});
|
var s = SpyObject.stub({"a":1}, {"b":2});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue