From 3c5ea67992355c8d9169b254324ba6ed2237b323 Mon Sep 17 00:00:00 2001 From: bendtherules Date: Sun, 11 Aug 2019 22:12:23 +0530 Subject: [PATCH] Add testcase - traverseGenerator-skipped Some simple cases covered. Needs more thought out cases with combination --- test/traverseGenerator-skipped.spec.tsx | 143 ++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 test/traverseGenerator-skipped.spec.tsx diff --git a/test/traverseGenerator-skipped.spec.tsx b/test/traverseGenerator-skipped.spec.tsx new file mode 100644 index 0000000..1f5f5c0 --- /dev/null +++ b/test/traverseGenerator-skipped.spec.tsx @@ -0,0 +1,143 @@ +import * as React from "react"; + +// Import stuff from src +import { FiberNodeForComponentClass, FiberNode } from "../src/mocked-types"; +import { traverseGenerator } from "../src"; + +// Import test helpers and sample components +import { mountAndGetRootNode } from "./utils/mountInEnzyme"; +import { + createClassComponents + // createFunctionComponents +} from "./utils/createComponent"; + +describe("traverseGenerator", () => { + let container: HTMLDivElement; + + beforeEach(() => { + container = document.body.appendChild(document.createElement("div")); + }); + + afterEach(() => { + document.body.removeChild(container); + }); + + describe("skipped", () => { + it("should traverse just top-level with skipChild", () => { + const [C2, C3, C4, C5] = createClassComponents(["C2", "C3", "C4", "C5"]); + class C1 extends React.Component { + render() { + return ( + + + + + + + + + ); + } + } + + const rootNode = mountAndGetRootNode(C1, container); + + const nodeIterator = traverseGenerator(rootNode); + + // Consume generator + let nodes: Array = []; + const genArgs = { skipChild: true }; + for ( + let result = nodeIterator.next(); + !result.done; + result = nodeIterator.next(genArgs) + ) { + const currentNode = result.value; + nodes.push(currentNode); + } + + expect(nodes.length).toBe(1); + expect( + nodes.map(tmpNode => (tmpNode as FiberNodeForComponentClass).type) + ).toEqual([C1]); + }); + + it("should traverse just first 2 levels with inner skipChild", () => { + const [C2, C3, C4, C5] = createClassComponents(["C2", "C3", "C4", "C5"]); + class C1 extends React.Component { + render() { + return ( + + + + + + + + + ); + } + } + + const rootNode = mountAndGetRootNode(C1, container); + + const nodeIterator = traverseGenerator(rootNode); + + // Consume generator + let nodes: Array = []; + const genArgs = { skipChild: true }; + for ( + let result = nodeIterator.next(); + !result.done; + result = nodeIterator.next(nodes.length > 1 ? genArgs : undefined) + ) { + const currentNode = result.value; + nodes.push(currentNode); + } + + expect(nodes.length).toBe(3); + expect( + nodes.map(tmpNode => (tmpNode as FiberNodeForComponentClass).type) + ).toEqual([C1, C2, C4]); + }); + + it("should traverse one branch correctly with skipSibling", () => { + const [C2, C3, C4, C5] = createClassComponents(["C2", "C3", "C4", "C5"]); + class C1 extends React.Component { + render() { + return ( + + + + + + + + + ); + } + } + + const rootNode = mountAndGetRootNode(C1, container); + + const nodeIterator = traverseGenerator(rootNode); + + // Consume generator + let nodes: Array = []; + const genArgs = { skipSibling: true }; + for ( + let result = nodeIterator.next(); + !result.done; + result = nodeIterator.next(genArgs) + ) { + const currentNode = result.value; + nodes.push(currentNode); + } + + expect(nodes.length).toBe(3); + expect( + nodes.map(tmpNode => (tmpNode as FiberNodeForComponentClass).type) + ).toEqual([C1, C2, C3]); + }); + }); +});