mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
178 lines
6.7 KiB
TypeScript
178 lines
6.7 KiB
TypeScript
import 'reflect-metadata';
|
|
|
|
import { assert } from 'chai';
|
|
import * as eslintScope from 'eslint-scope';
|
|
import * as ESTree from 'estree';
|
|
|
|
import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers';
|
|
|
|
import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade';
|
|
import { IScopeAnalyzer } from '../../../../src/interfaces/analyzers/scope-analyzer/IScopeAnalyzer';
|
|
|
|
import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade';
|
|
import { NodeFactory } from '../../../../src/node/NodeFactory';
|
|
|
|
describe('ScopeAnalyzer', () => {
|
|
let scopeAnalyzer: IScopeAnalyzer;
|
|
|
|
beforeEach(() => {
|
|
const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
|
|
|
|
inversifyContainerFacade.load('', '', {});
|
|
scopeAnalyzer = inversifyContainerFacade
|
|
.get<IScopeAnalyzer>(ServiceIdentifiers.IScopeAnalyzer);
|
|
});
|
|
|
|
describe('analyze', () => {
|
|
const expectedScopeVariablesLength: number = 1;
|
|
const expectedScopeVariablesName: string = 'foo';
|
|
|
|
let scopeVariablesLength: number;
|
|
let scopeVariableName: string;
|
|
|
|
describe('Variant #1: base analyze of the scope for ProgramNode', () => {
|
|
beforeEach(() => {
|
|
const programNode: ESTree.Program = NodeFactory.programNode([
|
|
NodeFactory.variableDeclarationNode([
|
|
NodeFactory.variableDeclaratorNode(
|
|
NodeFactory.identifierNode('foo'),
|
|
NodeFactory.literalNode(1)
|
|
)
|
|
])
|
|
]);
|
|
|
|
scopeAnalyzer.analyze(programNode);
|
|
|
|
const scope: eslintScope.Scope = scopeAnalyzer.acquireScope(programNode);
|
|
|
|
scopeVariablesLength = scope.variables.length;
|
|
scopeVariableName = scope.variables[0].name;
|
|
});
|
|
|
|
it('should return scope data with variables', () => {
|
|
assert.equal(scopeVariablesLength, expectedScopeVariablesLength);
|
|
});
|
|
|
|
it('should return scope data with correct variable name', () => {
|
|
assert.equal(scopeVariableName, expectedScopeVariablesName);
|
|
});
|
|
});
|
|
|
|
describe('Variant #2: Acquire of the scope for VariableDeclarationNode', () => {
|
|
const expectedError: string = 'Cannot acquire scope for node';
|
|
|
|
let testFunc: () => eslintScope.Scope;
|
|
|
|
beforeEach(() => {
|
|
const variableDeclarationNode: ESTree.VariableDeclaration = NodeFactory.variableDeclarationNode([
|
|
NodeFactory.variableDeclaratorNode(
|
|
NodeFactory.identifierNode('foo'),
|
|
NodeFactory.literalNode(1)
|
|
)
|
|
]);
|
|
const programNode: ESTree.Program = NodeFactory.programNode([variableDeclarationNode]);
|
|
|
|
scopeAnalyzer.analyze(programNode);
|
|
|
|
testFunc = () => scopeAnalyzer.acquireScope(variableDeclarationNode);
|
|
});
|
|
|
|
it('should throw error', () => {
|
|
assert.throws(testFunc, expectedError);
|
|
});
|
|
});
|
|
|
|
describe('Variant #3: acquire scope without analyzing', () => {
|
|
const expectedError: string = 'Scope manager is not defined';
|
|
|
|
let testFunc: () => eslintScope.Scope;
|
|
|
|
beforeEach(() => {
|
|
const programNode: ESTree.Program = NodeFactory.programNode([
|
|
NodeFactory.variableDeclarationNode([
|
|
NodeFactory.variableDeclaratorNode(
|
|
NodeFactory.identifierNode('foo'),
|
|
NodeFactory.literalNode(1)
|
|
)
|
|
])
|
|
]);
|
|
|
|
testFunc = () => scopeAnalyzer.acquireScope(programNode);
|
|
});
|
|
|
|
it('should throw error', () => {
|
|
assert.throws(testFunc, expectedError);
|
|
});
|
|
});
|
|
|
|
describe('Variant #4: analyzing error', () => {
|
|
const expectedError: ErrorConstructor = Error;
|
|
|
|
let testFunc: () => void;
|
|
|
|
beforeEach(() => {
|
|
const variableDeclarationNode: ESTree.VariableDeclaration = NodeFactory.variableDeclarationNode([
|
|
NodeFactory.variableDeclaratorNode(
|
|
NodeFactory.identifierNode('foo'),
|
|
NodeFactory.literalNode(1)
|
|
)
|
|
]);
|
|
const programNode: ESTree.Program = NodeFactory.programNode([variableDeclarationNode]);
|
|
|
|
testFunc = () => {
|
|
scopeAnalyzer.analyze(programNode);
|
|
scopeAnalyzer.analyze(variableDeclarationNode);
|
|
};
|
|
});
|
|
|
|
it('should throw error', () => {
|
|
assert.throws(testFunc, expectedError);
|
|
});
|
|
});
|
|
|
|
describe('Variant #5: cannot read property `0` of undefined error', () => {
|
|
const expectedError: string = 'Cannot read property';
|
|
|
|
let testFunc: () => void;
|
|
|
|
beforeEach(() => {
|
|
const variableDeclarationNode: ESTree.VariableDeclaration = NodeFactory.variableDeclarationNode([
|
|
NodeFactory.variableDeclaratorNode(
|
|
NodeFactory.identifierNode('foo'),
|
|
NodeFactory.literalNode(1)
|
|
)
|
|
]);
|
|
const programNode: ESTree.Program = NodeFactory.programNode([
|
|
NodeFactory.ifStatementNode(
|
|
NodeFactory.binaryExpressionNode(
|
|
'+',
|
|
NodeFactory.literalNode(1),
|
|
NodeFactory.literalNode(2)
|
|
),
|
|
NodeFactory.blockStatementNode([
|
|
variableDeclarationNode
|
|
]),
|
|
NodeFactory.blockStatementNode([
|
|
NodeFactory.functionDeclarationNode(
|
|
'bar',
|
|
[],
|
|
NodeFactory.blockStatementNode([
|
|
variableDeclarationNode
|
|
])
|
|
)
|
|
])
|
|
)
|
|
]);
|
|
|
|
testFunc = () => {
|
|
scopeAnalyzer.analyze(programNode);
|
|
};
|
|
});
|
|
|
|
it('should does not throw error', () => {
|
|
assert.doesNotThrow(testFunc, expectedError);
|
|
});
|
|
});
|
|
});
|
|
});
|