import traverse from "../lib"; import assert from "assert"; import { parse } from "babylon"; import { expect } from "chai"; describe("path/ancestry", function () { describe("isAncestor", function () { const ast = parse("var a = 1; 'a';"); it("returns true if ancestor", function() { const paths = []; traverse(ast, { "Program|NumericLiteral"(path) { paths.push(path); }, }); const [ programPath, numberPath ] = paths; assert(programPath.isAncestor(numberPath)); }); it("returns false if not ancestor", function() { const paths = []; traverse(ast, { "Program|NumericLiteral|StringLiteral"(path) { paths.push(path); }, }); const [ , numberPath, stringPath ] = paths; assert(!stringPath.isAncestor(numberPath)); }); }); describe("isDescendant", function () { const ast = parse("var a = 1; 'a';"); it("returns true if descendant", function() { const paths = []; traverse(ast, { "Program|NumericLiteral"(path) { paths.push(path); }, }); const [ programPath, numberPath ] = paths; assert(numberPath.isDescendant(programPath)); }); it("returns false if not descendant", function() { const paths = []; traverse(ast, { "Program|NumericLiteral|StringLiteral"(path) { paths.push(path); }, }); const [ , numberPath, stringPath ] = paths; assert(!numberPath.isDescendant(stringPath)); }); }); describe("getStatementParent", function () { const ast = parse("var a = 1;"); it("should throw", function () { expect(function () { traverse(ast, { Program(path) { path.getStatementParent(); }, }); }).to.throw(/File\/Program node/); }); }); });