mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
113 lines
4.3 KiB
TypeScript
113 lines
4.3 KiB
TypeScript
import 'reflect-metadata';
|
|
|
|
import * as ESTree from 'estree';
|
|
|
|
import { assert } from 'chai';
|
|
|
|
import { TNumberNumericalExpressionData } from '../../../../src/types/analyzers/number-numerical-expression-analyzer/TNumberNumericalExpressionData';
|
|
|
|
import { NodeFactory } from '../../../../src/node/NodeFactory';
|
|
import { NumericalExpressionDataToNodeConverter } from '../../../../src/node/NumericalExpressionDataToNodeConverter';
|
|
|
|
describe('NumericalExpressionDataToNodeConverter', () => {
|
|
describe('convertIntegerNumberData', () => {
|
|
describe('Variant #1: base', () => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData = [
|
|
1, [-2, 3], 4
|
|
];
|
|
|
|
const expectedExpressionNode: ESTree.Expression = NodeFactory.binaryExpressionNode(
|
|
'+',
|
|
NodeFactory.binaryExpressionNode(
|
|
'+',
|
|
NodeFactory.literalNode(1),
|
|
NodeFactory.binaryExpressionNode(
|
|
'*',
|
|
NodeFactory.unaryExpressionNode(
|
|
'-',
|
|
NodeFactory.literalNode(2),
|
|
),
|
|
NodeFactory.literalNode(3)
|
|
),
|
|
),
|
|
NodeFactory.literalNode(4)
|
|
);
|
|
|
|
let expressionNode: ESTree.Expression;
|
|
|
|
before(() => {
|
|
expressionNode = NumericalExpressionDataToNodeConverter.convertIntegerNumberData(
|
|
numberNumericalExpressionData,
|
|
(number: number, isPositiveNumber: boolean): ESTree.Expression => {
|
|
const numberLiteralNode: ESTree.Literal = NodeFactory.literalNode(number);
|
|
|
|
return isPositiveNumber
|
|
? numberLiteralNode
|
|
: NodeFactory.unaryExpressionNode(
|
|
'-',
|
|
numberLiteralNode
|
|
);
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should convert number numerical expression data to expression node', () => {
|
|
assert.deepEqual(expressionNode, expectedExpressionNode);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('convertFloatNumberData', () => {
|
|
describe('Variant #1: base', () => {
|
|
const integerNumberNumericalExpressionData: TNumberNumericalExpressionData = [
|
|
1, [-2, 3], 4
|
|
];
|
|
const decimalPart: number = 0.000000001;
|
|
|
|
const expectedExpressionNode: ESTree.Expression = NodeFactory.binaryExpressionNode(
|
|
'+',
|
|
NodeFactory.binaryExpressionNode(
|
|
'+',
|
|
NodeFactory.binaryExpressionNode(
|
|
'+',
|
|
NodeFactory.literalNode(1),
|
|
NodeFactory.binaryExpressionNode(
|
|
'*',
|
|
NodeFactory.unaryExpressionNode(
|
|
'-',
|
|
NodeFactory.literalNode(2),
|
|
),
|
|
NodeFactory.literalNode(3)
|
|
),
|
|
),
|
|
NodeFactory.literalNode(4)
|
|
),
|
|
NodeFactory.literalNode(decimalPart)
|
|
);
|
|
|
|
let expressionNode: ESTree.Expression;
|
|
|
|
before(() => {
|
|
expressionNode = NumericalExpressionDataToNodeConverter.convertFloatNumberData(
|
|
integerNumberNumericalExpressionData,
|
|
decimalPart,
|
|
(number: number, isPositiveNumber: boolean): ESTree.Expression => {
|
|
const numberLiteralNode: ESTree.Literal = NodeFactory.literalNode(number);
|
|
|
|
return isPositiveNumber
|
|
? numberLiteralNode
|
|
: NodeFactory.unaryExpressionNode(
|
|
'-',
|
|
numberLiteralNode
|
|
);
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should convert number numerical expression data to expression node', () => {
|
|
assert.deepEqual(expressionNode, expectedExpressionNode);
|
|
});
|
|
});
|
|
});
|
|
});
|