From f0d4eec946f5fbf95721e1e5178c9dea515824f0 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 23 Sep 2019 17:16:07 -0400 Subject: [PATCH] test: refactor vFor tests --- .../__tests__/transforms/vFor.spec.ts | 216 ++++-------------- 1 file changed, 45 insertions(+), 171 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/vFor.spec.ts b/packages/compiler-core/__tests__/transforms/vFor.spec.ts index 5c5bc1cd6..92664e75a 100644 --- a/packages/compiler-core/__tests__/transforms/vFor.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vFor.spec.ts @@ -3,18 +3,24 @@ import { transform } from '../../src/transform' import { transformFor } from '../../src/transforms/vFor' import { ForNode, NodeTypes } from '../../src/ast' import { ErrorCodes } from '../../src/errors' +import { CompilerOptions } from '../../src' + +function transformWithFor( + template: string, + options: CompilerOptions = {} +): ForNode { + const node = parse(template, options) + transform(node, { nodeTransforms: [transformFor], ...options }) + if (!options.onError) { + expect(node.children.length).toBe(1) + expect(node.children[0].type).toBe(NodeTypes.FOR) + } + return node.children[0] as ForNode +} describe('compiler: transform v-for', () => { test('number expression', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).toBeUndefined() expect(forNode.valueAlias!.content).toBe('index') @@ -22,15 +28,7 @@ describe('compiler: transform v-for', () => { }) test('value', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).toBeUndefined() expect(forNode.valueAlias!.content).toBe('item') @@ -38,15 +36,9 @@ describe('compiler: transform v-for', () => { }) test('object de-structured value', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor( + '' + ) expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).toBeUndefined() expect(forNode.valueAlias!.content).toBe('{ id, value }') @@ -54,15 +46,9 @@ describe('compiler: transform v-for', () => { }) test('array de-structured value', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor( + '' + ) expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).toBeUndefined() expect(forNode.valueAlias!.content).toBe('[ id, value ]') @@ -70,14 +56,7 @@ describe('compiler: transform v-for', () => { }) test('value and key', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - + const forNode = transformWithFor('') expect(forNode.keyAlias).not.toBeUndefined() expect(forNode.keyAlias!.content).toBe('key') expect(forNode.objectIndexAlias).toBeUndefined() @@ -86,15 +65,9 @@ describe('compiler: transform v-for', () => { }) test('value, key and index', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor( + '' + ) expect(forNode.keyAlias).not.toBeUndefined() expect(forNode.keyAlias!.content).toBe('key') expect(forNode.objectIndexAlias).not.toBeUndefined() @@ -104,15 +77,7 @@ describe('compiler: transform v-for', () => { }) test('skipped key', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).not.toBeUndefined() expect(forNode.objectIndexAlias!.content).toBe('index') @@ -121,15 +86,7 @@ describe('compiler: transform v-for', () => { }) test('skipped value and key', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).not.toBeUndefined() expect(forNode.objectIndexAlias!.content).toBe('index') @@ -138,15 +95,7 @@ describe('compiler: transform v-for', () => { }) test('unbracketed value', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).toBeUndefined() expect(forNode.valueAlias!.content).toBe('item') @@ -154,15 +103,7 @@ describe('compiler: transform v-for', () => { }) test('unbracketed value and key', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).not.toBeUndefined() expect(forNode.keyAlias!.content).toBe('key') expect(forNode.objectIndexAlias).toBeUndefined() @@ -171,15 +112,9 @@ describe('compiler: transform v-for', () => { }) test('unbracketed value, key and index', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor( + '' + ) expect(forNode.keyAlias).not.toBeUndefined() expect(forNode.keyAlias!.content).toBe('key') expect(forNode.objectIndexAlias).not.toBeUndefined() @@ -189,15 +124,7 @@ describe('compiler: transform v-for', () => { }) test('unbracketed skipped key', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).not.toBeUndefined() expect(forNode.objectIndexAlias!.content).toBe('index') @@ -206,15 +133,7 @@ describe('compiler: transform v-for', () => { }) test('unbracketed skipped value and key', () => { - const node = parse('') - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor('') expect(forNode.keyAlias).toBeUndefined() expect(forNode.objectIndexAlias).not.toBeUndefined() expect(forNode.objectIndexAlias!.content).toBe('index') @@ -223,9 +142,8 @@ describe('compiler: transform v-for', () => { }) test('missing expression', () => { - const node = parse('') const onError = jest.fn() - transform(node, { nodeTransforms: [transformFor], onError }) + transformWithFor('', { onError }) expect(onError).toHaveBeenCalledTimes(1) expect(onError).toHaveBeenCalledWith( @@ -236,9 +154,8 @@ describe('compiler: transform v-for', () => { }) test('empty expression', () => { - const node = parse('') const onError = jest.fn() - transform(node, { nodeTransforms: [transformFor], onError }) + transformWithFor('', { onError }) expect(onError).toHaveBeenCalledTimes(1) expect(onError).toHaveBeenCalledWith( @@ -249,9 +166,8 @@ describe('compiler: transform v-for', () => { }) test('invalid expression', () => { - const node = parse('') const onError = jest.fn() - transform(node, { nodeTransforms: [transformFor], onError }) + transformWithFor('', { onError }) expect(onError).toHaveBeenCalledTimes(1) expect(onError).toHaveBeenCalledWith( @@ -262,9 +178,8 @@ describe('compiler: transform v-for', () => { }) test('missing source', () => { - const node = parse('') const onError = jest.fn() - transform(node, { nodeTransforms: [transformFor], onError }) + transformWithFor('', { onError }) expect(onError).toHaveBeenCalledTimes(1) expect(onError).toHaveBeenCalledWith( @@ -275,9 +190,8 @@ describe('compiler: transform v-for', () => { }) test('missing value', () => { - const node = parse('') const onError = jest.fn() - transform(node, { nodeTransforms: [transformFor], onError }) + transformWithFor('', { onError }) expect(onError).toHaveBeenCalledTimes(1) expect(onError).toHaveBeenCalledWith( @@ -290,15 +204,7 @@ describe('compiler: transform v-for', () => { describe('source location', () => { test('value & source', () => { const source = '' - const node = parse(source) - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor(source) expect(forNode.valueAlias!.content).toBe('item') expect(forNode.valueAlias!.loc.start.offset).toBe( @@ -321,15 +227,7 @@ describe('compiler: transform v-for', () => { test('bracketed value', () => { const source = '' - const node = parse(source) - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor(source) expect(forNode.valueAlias!.content).toBe('item') expect(forNode.valueAlias!.loc.start.offset).toBe( @@ -352,15 +250,7 @@ describe('compiler: transform v-for', () => { test('de-structured value', () => { const source = '' - const node = parse(source) - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor(source) expect(forNode.valueAlias!.content).toBe('{ id, key }') expect(forNode.valueAlias!.loc.start.offset).toBe( @@ -385,15 +275,7 @@ describe('compiler: transform v-for', () => { test('bracketed value, key, index', () => { const source = '' - const node = parse(source) - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor(source) expect(forNode.valueAlias!.content).toBe('item') expect(forNode.valueAlias!.loc.start.offset).toBe( @@ -436,15 +318,7 @@ describe('compiler: transform v-for', () => { test('skipped key', () => { const source = '' - const node = parse(source) - - transform(node, { nodeTransforms: [transformFor] }) - - expect(node.children.length).toBe(1) - - const forNode = node.children[0] as ForNode - - expect(forNode.type).toBe(NodeTypes.FOR) + const forNode = transformWithFor(source) expect(forNode.valueAlias!.content).toBe('item') expect(forNode.valueAlias!.loc.start.offset).toBe(