From 1149ee4be04a31d70b6e410440acacd6f1d5d740 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 19 Mar 2018 01:28:34 +0300 Subject: [PATCH] Tests for NodeMetadata class --- src/declarations/ESTree.d.ts | 8 +- src/node/NodeMetadata.ts | 19 ++-- test/index.spec.ts | 1 + .../node/node-metadata/NodeMetadata.spec.ts | 103 ++++++++++++++++++ 4 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 test/unit-tests/node/node-metadata/NodeMetadata.spec.ts diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts index ac562922..dd5b134f 100644 --- a/src/declarations/ESTree.d.ts +++ b/src/declarations/ESTree.d.ts @@ -12,7 +12,7 @@ declare module 'estree' { renamedIdentifier?: boolean; } - export interface SimpleLiteralNodeMetadata extends BaseNodeMetadata { + export interface LiteralNodeMetadata extends BaseNodeMetadata { replacedLiteral?: boolean; } @@ -26,7 +26,11 @@ declare module 'estree' { } interface SimpleLiteral extends BaseNode { - metadata?: SimpleLiteralNodeMetadata; + metadata?: LiteralNodeMetadata; + } + + interface RegExpLiteral extends BaseNode { + metadata?: LiteralNodeMetadata; } interface ExpressionStatement extends BaseNode { diff --git a/src/node/NodeMetadata.ts b/src/node/NodeMetadata.ts index 45ddd832..335e1208 100644 --- a/src/node/NodeMetadata.ts +++ b/src/node/NodeMetadata.ts @@ -2,8 +2,8 @@ import * as ESTree from 'estree'; export class NodeMetadata { /** - * @param {Node} node - * @param {BaseNodeMetadata} metadata + * @param {T} node + * @param {Partial} metadata */ public static set (node: T, metadata: Partial): void { node.metadata = Object.assign(node.metadata || {}, metadata); @@ -11,15 +11,12 @@ export class NodeMetadata { /** * @param {Node} node - * @param {BaseNodeMetadata} metadataKey - * @returns {T | undefined} + * @param {keyof T} metadataKey + * @returns {T[keyof T] | undefined} */ - public static get ( - node: ESTree.Node, - metadataKey: keyof U - ): T | undefined { + public static get (node: ESTree.Node, metadataKey: keyof T): T[keyof T] | undefined { return node.metadata !== undefined - ? (node.metadata)[metadataKey] + ? (node.metadata)[metadataKey] : undefined; } @@ -36,7 +33,7 @@ export class NodeMetadata { * @returns {boolean} */ public static isRenamedIdentifier (identifierNode: ESTree.Identifier): boolean { - return NodeMetadata.get(identifierNode, 'renamedIdentifier') === true; + return NodeMetadata.get(identifierNode, 'renamedIdentifier') === true; } /** @@ -44,6 +41,6 @@ export class NodeMetadata { * @returns {boolean} */ public static isReplacedLiteral (literalNode: ESTree.Literal): boolean { - return NodeMetadata.get(literalNode, 'replacedLiteral') === true; + return NodeMetadata.get(literalNode, 'replacedLiteral') === true; } } diff --git a/test/index.spec.ts b/test/index.spec.ts index 10dea425..9ccd3c2c 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -22,6 +22,7 @@ import './unit-tests/javascript-obfuscator/JavaScriptObfuscator.spec'; import './unit-tests/logger/Logger.spec'; import './unit-tests/node/node-appender/NodeAppender.spec'; import './unit-tests/node/node-guards/NodeGuards.spec'; +import './unit-tests/node/node-metadata/NodeMetadata.spec'; import './unit-tests/node/node-utils/NodeUtils.spec'; import './unit-tests/node-transformers/preparing-transformers/ObfuscatingGuardsTransformer.spec'; import './unit-tests/obfuscation-result/ObfuscationResult.spec'; diff --git a/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts b/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts new file mode 100644 index 00000000..19f97e0d --- /dev/null +++ b/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts @@ -0,0 +1,103 @@ +import 'reflect-metadata'; + +import * as ESTree from 'estree'; + +import { assert } from 'chai'; + +import { NodeMetadata } from '../../../../src/node/NodeMetadata'; +import { NodeFactory } from '../../../../src/node/NodeFactory'; + +describe('NodeMetadata', () => { + describe('set', () => { + const expectedMetadata: ESTree.IdentifierNodeMetadata = { + ignoredNode: true, + renamedIdentifier: true + }; + + let node: ESTree.Identifier; + + before(() => { + node = NodeFactory.identifierNode('foo'); + NodeMetadata.set(node, { + ignoredNode: true, + renamedIdentifier: true + }) + }); + + it('should set metadata to the node', () => { + assert.deepPropertyVal(node, 'metadata', expectedMetadata); + }); + }); + + describe('get', () => { + const expectedValue: boolean = true; + + let node: ESTree.Identifier, + value: boolean | undefined; + + before(() => { + node = NodeFactory.identifierNode('foo'); + node.metadata = {}; + node.metadata.renamedIdentifier = true; + value = NodeMetadata.get(node, 'renamedIdentifier'); + }); + + it('should get metadata value of the node', () => { + assert.equal(value, expectedValue); + }); + }); + + describe('isIgnoredNode (node: ESTree.Node): boolean', () => { + const expectedValue: boolean = true; + + let node: ESTree.Identifier, + value: boolean | undefined; + + before(() => { + node = NodeFactory.identifierNode('foo'); + node.metadata = {}; + node.metadata.ignoredNode = true; + value = NodeMetadata.isIgnoredNode(node); + }); + + it('should return metadata value', () => { + assert.equal(value, expectedValue); + }); + }); + + describe('isRenamedIdentifier (identifierNode: ESTree.Identifier): boolean', () => { + const expectedValue: boolean = true; + + let node: ESTree.Identifier, + value: boolean | undefined; + + before(() => { + node = NodeFactory.identifierNode('foo'); + node.metadata = {}; + node.metadata.renamedIdentifier = true; + value = NodeMetadata.isRenamedIdentifier(node); + }); + + it('should return metadata value', () => { + assert.equal(value, expectedValue); + }); + }); + + describe('isReplacedLiteral (literalNode: ESTree.Literal): boolean', () => { + const expectedValue: boolean = true; + + let node: ESTree.Literal, + value: boolean | undefined; + + before(() => { + node = NodeFactory.literalNode('foo'); + node.metadata = {}; + node.metadata.replacedLiteral = true; + value = NodeMetadata.isReplacedLiteral(node); + }); + + it('should return metadata value', () => { + assert.equal(value, expectedValue); + }); + }); +});