UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

111 lines (109 loc) 4.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const utils_1 = require("./../../utils"); describe("AdvancedIterator", () => { function* getNumIterator() { for (let i = 0; i < 10; i++) yield i; } function getIteratedIterator() { const iterator = new utils_1.AdvancedIterator(getNumIterator()); while (!iterator.done) iterator.next(); return iterator; } describe("done", () => { it("should not be done when not done", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); chai_1.expect(iterator.done).to.be.false; }); it("should be done when done", () => { chai_1.expect(getIteratedIterator().done).to.be.true; }); }); describe("next", () => { it("should get the next until it runs out", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); const nums = []; while (!iterator.done) nums.push(iterator.next()); chai_1.expect(nums).to.deep.equal(Array.from(getNumIterator())); }); it("should throw when calling .next at the end of the iterator", () => { const iterator = getIteratedIterator(); chai_1.expect(() => iterator.next()).to.throw(); }); }); describe("current", () => { it("should throw if called before anything else", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); chai_1.expect(() => iterator.current).to.throw(); }); it("should not advance the iterator if called multiple times", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); iterator.next(); chai_1.expect(iterator.current).to.equal(0); chai_1.expect(iterator.current).to.equal(0); }); it("should get the current after going next", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); iterator.next(); iterator.next(); chai_1.expect(iterator.current).to.equal(1); }); it("should get the current at the end of an iterator", () => { const iterator = getIteratedIterator(); chai_1.expect(iterator.current).to.equal(9); }); }); describe("previous", () => { it("should throw if called before anything else", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); chai_1.expect(() => iterator.previous).to.throw(); }); it("should throw if called after only moving forward once", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); iterator.next(); chai_1.expect(() => iterator.previous).to.throw(); }); it("should get previous if moved forward twice", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); iterator.next(); iterator.next(); chai_1.expect(iterator.previous).to.equal(0); }); it("should get previous", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); iterator.next(); iterator.next(); iterator.next(); chai_1.expect(iterator.previous).to.equal(1); }); }); describe("peek", () => { it("should peek the value if called before anything else", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); chai_1.expect(iterator.peek).to.equal(0); }); it("should not advance the iterator if called multiple times", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); iterator.next(); chai_1.expect(iterator.peek).to.equal(1); chai_1.expect(iterator.peek).to.equal(1); }); it("should throw at the end of an iterator", () => { const iterator = getIteratedIterator(); chai_1.expect(() => iterator.peek).to.throw(); }); }); describe("rest", () => { it("should iterate through the rest of the values", () => { const iterator = new utils_1.AdvancedIterator(getNumIterator()); iterator.next(); iterator.next(); chai_1.expect(Array.from(iterator.rest())).to.deep.equal(Array.from(getNumIterator()).slice(2)); }); }); }); //# sourceMappingURL=advancedIteratorTests.js.map