diff --git a/src/matcher/type/MatchingStringMatcher.ts b/src/matcher/type/MatchingStringMatcher.ts new file mode 100644 index 0000000..2806500 --- /dev/null +++ b/src/matcher/type/MatchingStringMatcher.ts @@ -0,0 +1,15 @@ +import {Matcher} from "./Matcher"; + +export class MatchingStringMatcher extends Matcher { + constructor(private expectedValue: any) { + super(); + } + + public match(value: any): boolean { + return value.match(this.expectedValue); + } + + public toString(): string { + return `match(${this.expectedValue})`; + } +} diff --git a/src/matcher/type/ObjectContainingMatcher.ts b/src/matcher/type/ObjectContainingMatcher.ts new file mode 100644 index 0000000..7ed3814 --- /dev/null +++ b/src/matcher/type/ObjectContainingMatcher.ts @@ -0,0 +1,16 @@ +import * as _ from "lodash"; +import {Matcher} from "./Matcher"; + +export class ObjectContainingMatcher extends Matcher { + constructor(private expectedValue: any) { + super(); + } + + public match(value: Object): boolean { + return _.isMatch(value, this.expectedValue); + } + + public toString(): string { + return `objectContaining(${this.expectedValue})`; + } +} diff --git a/src/ts-mockito.ts b/src/ts-mockito.ts index 38f65e6..9c51f33 100644 --- a/src/ts-mockito.ts +++ b/src/ts-mockito.ts @@ -19,7 +19,9 @@ import {AnythingMatcher} from "./matcher/type/AnythingMatcher"; import {BetweenMatcher} from "./matcher/type/BetweenMatcher"; import {DeepEqualMatcher} from "./matcher/type/DeepEqualMatcher"; import {Matcher} from "./matcher/type/Matcher"; +import {MatchingStringMatcher} from "./matcher/type/MatchingStringMatcher"; import {NotNullMatcher} from "./matcher/type/NotNullMatcher"; +import {ObjectContainingMatcher} from "./matcher/type/ObjectContainingMatcher"; import {StrictEqualMatcher} from "./matcher/type/StrictEqualMatcher"; import {MethodStubSetter} from "./MethodStubSetter"; import {MethodStubVerificator} from "./MethodStubVerificator"; @@ -112,5 +114,14 @@ export function strictEqual(expectedValue: any): Matcher { return new StrictEqualMatcher(expectedValue); } +export function match(expectedValue: RegExp | string): Matcher { + return new MatchingStringMatcher(expectedValue); +} + +export function objectContaining(expectedValue: Object): Matcher { + return new ObjectContainingMatcher(expectedValue); +} + import * as mockito from "./ts-mockito"; + export default mockito; diff --git a/test/matcher/type/BetweenMatcher.spec.ts b/test/matcher/type/BetweenMatcher.spec.ts index bd77383..10c0708 100644 --- a/test/matcher/type/BetweenMatcher.spec.ts +++ b/test/matcher/type/BetweenMatcher.spec.ts @@ -6,7 +6,7 @@ describe("BetweenMatcher", () => { const testObj: Matcher = between(5, 10); describe("when given value is lower than min", () => { - it("returns true", () => { + it("returns false", () => { // when const result = testObj.match(4); diff --git a/test/matcher/type/MatchingStringMatcher.spec.ts b/test/matcher/type/MatchingStringMatcher.spec.ts new file mode 100644 index 0000000..e4288d0 --- /dev/null +++ b/test/matcher/type/MatchingStringMatcher.spec.ts @@ -0,0 +1,29 @@ +import {Matcher} from "../../../src/matcher/type/Matcher"; +import {match} from "../../../src/ts-mockito"; + +describe("MatchingStringMatcher", () => { + describe("checking if value matches given regexp", () => { + const testObj: Matcher = match(/\w123/); + + describe("when given value matches regexp", () => { + it("returns true", () => { + // when + const result = testObj.match("a123"); + + // then + expect(result).toBeTruthy(); + }); + }); + + describe("when given value doesn\'t match regexp", () => { + it("returns false", () => { + // when + const result = testObj.match("123"); + + // then + expect(result).toBeFalsy(); + }); + }); + }); + +}); diff --git a/test/matcher/type/ObjectContainingMatcher.spec.ts b/test/matcher/type/ObjectContainingMatcher.spec.ts new file mode 100644 index 0000000..d8c5376 --- /dev/null +++ b/test/matcher/type/ObjectContainingMatcher.spec.ts @@ -0,0 +1,37 @@ +import {Matcher} from "../../../src/matcher/type/Matcher"; +import {objectContaining} from "../../../src/ts-mockito"; + +describe("ObjectContainingMatcher", () => { + describe("checking if source object contains given object", () => { + const testObj: Matcher = objectContaining({b: {c: "c", d: {}}}); + + describe("when given value contains given object", () => { + it("returns true", () => { + // when + const result = testObj.match({a: "a", b: {c: "c", d: {}}}); + + // then + expect(result).toBeTruthy(); + }); + + it("returns true", () => { + // when + const result = testObj.match({b: {c: "c", d: {}}}); + + // then + expect(result).toBeTruthy(); + }); + }); + + describe("when given value doesn't contain given object", () => { + it("returns false", () => { + // when + const result = testObj.match({b: {c: "c"}}); + + // then + expect(result).toBeFalsy(); + }); + }); + }); + +});