Tests for NodeMetadata class

This commit is contained in:
sanex3339
2018-03-19 01:28:34 +03:00
parent 86c79ae69a
commit 1149ee4be0
4 changed files with 118 additions and 13 deletions
+6 -2
View File
@@ -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 {
+8 -11
View File
@@ -2,8 +2,8 @@ import * as ESTree from 'estree';
export class NodeMetadata {
/**
* @param {Node} node
* @param {BaseNodeMetadata} metadata
* @param {T} node
* @param {Partial<T["metadata"]>} metadata
*/
public static set <T extends ESTree.Node = ESTree.Node> (node: T, metadata: Partial<T['metadata']>): 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 <T extends U[keyof U], U extends ESTree.BaseNodeMetadata> (
node: ESTree.Node,
metadataKey: keyof U
): T | undefined {
public static get <T extends ESTree.BaseNodeMetadata> (node: ESTree.Node, metadataKey: keyof T): T[keyof T] | undefined {
return node.metadata !== undefined
? <T>(<U>node.metadata)[metadataKey]
? (<T>node.metadata)[metadataKey]
: undefined;
}
@@ -36,7 +33,7 @@ export class NodeMetadata {
* @returns {boolean}
*/
public static isRenamedIdentifier (identifierNode: ESTree.Identifier): boolean {
return NodeMetadata.get<boolean, ESTree.IdentifierNodeMetadata>(identifierNode, 'renamedIdentifier') === true;
return NodeMetadata.get<ESTree.IdentifierNodeMetadata>(identifierNode, 'renamedIdentifier') === true;
}
/**
@@ -44,6 +41,6 @@ export class NodeMetadata {
* @returns {boolean}
*/
public static isReplacedLiteral (literalNode: ESTree.Literal): boolean {
return NodeMetadata.get<boolean, ESTree.SimpleLiteralNodeMetadata>(literalNode, 'replacedLiteral') === true;
return NodeMetadata.get<ESTree.LiteralNodeMetadata>(literalNode, 'replacedLiteral') === true;
}
}
+1
View File
@@ -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';
@@ -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<ESTree.IdentifierNodeMetadata>(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);
});
});
});