diff --git a/lib/enumerable.ts b/lib/enumerable.ts index 4f08c6f..8916664 100644 --- a/lib/enumerable.ts +++ b/lib/enumerable.ts @@ -303,6 +303,14 @@ export interface Enumerable extends Iterable, IEnumerable { * var e = asEnumerable([0, 1, 2, 3, 4, 5, 6, 7]).Min() */ Min(transform?: (x: T) => number): number; + + /** + * Filters the elements of an IEnumerable based on a specified type. + * @param Object to check InstanceOf against. + * @example + * var e = asEnumerable([0, 1, 2, 3, 4, 5, 6, 7]).OfType(myObject) + */ + OfType(type: any): Enumerable; /** * Sorts the elements of a sequence in ascending order by using a specified diff --git a/test/data.ts b/test/data.ts index 4142707..05ac886 100644 --- a/test/data.ts +++ b/test/data.ts @@ -57,4 +57,26 @@ var daisy = { Name: "Daisy", Age: 4, Owner: magnus }; export var people = [magnus, terry, charlotte]; export var pets = [barley, boots, whiskers, daisy]; +export var mix = [ + 0, + new Number(1), + "This is a simple string", + new String(), + new String("String created with constructor"), + new Date(), + true, + Symbol.iterator, + 2, + false, + { Name: "asd"}, + simpleArray, + un1, + new Boolean(true), + pets, + new Boolean(false), + 3, + function(){} + ]; + + /** Copyright (c) ENikS. All rights reserved. */ diff --git a/test/deferred.ts b/test/deferred.ts index ebac704..d9b1a0b 100644 --- a/test/deferred.ts +++ b/test/deferred.ts @@ -12,7 +12,7 @@ // License for the specific language governing permissions and limitations // under the License. -import {simpleArray, oddArray, jsn, un1, un2, people, pets} from "./data"; +import {simpleArray, oddArray, jsn, un1, un2, people, pets, mix} from "./data"; import {assert} from "chai"; import Linq from "../lib/linq"; @@ -239,6 +239,102 @@ describe('Deferred Execution -', function () { + // Except + + it('Except()', function () { + var iterable = Linq(simpleArray).Except([0, 2, 4, 6, 11]); + var iterator = iterable[Symbol.iterator]() + assert.equal(1, iterator.next().value); + assert.equal(3, iterator.next().value); + assert.equal(5, iterator.next().value); + assert.equal(7, iterator.next().value); + assert.equal(8, iterator.next().value); + assert.equal(9, iterator.next().value); + assert.equal(10, iterator.next().value); + assert.isTrue(iterator.next().done); + }); + + + + // OfType + + it('OfType() - Number', function () { + + var iterable = Linq(mix).OfType(Number); + var iterator = iterable[Symbol.iterator](); + assert.equal(iterator.next().value, 0); + assert.equal(iterator.next().value, 1); + assert.equal(iterator.next().value, 2); + assert.equal(iterator.next().value, 3); + assert.isTrue(iterator.next().done); + }); + + it('OfType() - Boolean', function () { + + var iterable = Linq(mix).OfType(Boolean); + var iterator = iterable[Symbol.iterator](); + assert.equal(iterator.next().value, true); + assert.equal(iterator.next().value, false); + assert.equal(iterator.next().value, true); + assert.equal(iterator.next().value, false); + assert.isTrue(iterator.next().done); + }); + + it('OfType() - String', function () { + + var iterable = Linq(mix).OfType(String); + var iterator = iterable[Symbol.iterator](); + assert.equal(iterator.next().value, mix[2]); + assert.equal(iterator.next().value, mix[3]); + assert.equal(iterator.next().value, mix[4]); + assert.isTrue(iterator.next().done); + }); + + it('OfType() - Date', function () { + + var iterable = Linq(mix).OfType(Date); + var iterator = iterable[Symbol.iterator](); + assert.equal(iterator.next().value, mix[5]); + assert.isTrue(iterator.next().done); + }); + + it('OfType() - Symbol', function () { + + var iterable = Linq(mix).OfType(Symbol); + var iterator = iterable[Symbol.iterator](); + assert.equal(iterator.next().value, mix[7]); + assert.isTrue(iterator.next().done); + }); + + it('OfType() - Function', function () { + + var iterable = Linq(mix).OfType(Function); + var iterator = iterable[Symbol.iterator](); + assert.equal(iterator.next().value, mix[17]); + assert.isTrue(iterator.next().done); + }); + + it('OfType() - Object', function () { + + var iterable = Linq(mix).OfType(Object); + var iterator = iterable[Symbol.iterator](); + assert.equal(iterator.next().value, 1); + assert.equal(iterator.next().value, mix[3]); + assert.equal(iterator.next().value, mix[4]); + assert.equal(iterator.next().value, mix[5]); + assert.equal(iterator.next().value, mix[10]); + assert.equal(iterator.next().value, mix[11]); + assert.equal(iterator.next().value, mix[12]); + assert.equal(iterator.next().value, mix[13]); + assert.equal(iterator.next().value, mix[14]); + assert.equal(iterator.next().value, mix[15]); + assert.equal(iterator.next().value, mix[17]); + assert.isTrue(iterator.next().done); + }); + + + + // Union it('Union()', function () { @@ -257,7 +353,6 @@ describe('Deferred Execution -', function () { assert.isTrue(iterator.next().done); }); - it('Union() - Keyed', function () { var iterable = Linq(un1).Union(un2, (o) => o.id); var iterator = iterable[Symbol.iterator]()