ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
111 lines (109 loc) • 4.67 kB
JavaScript
;
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