mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
179 lines
7.0 KiB
TypeScript
179 lines
7.0 KiB
TypeScript
import 'reflect-metadata';
|
|
|
|
import { assert } from 'chai';
|
|
|
|
import { ServiceIdentifiers } from '../../../../src/container/ServiceIdentifiers';
|
|
|
|
import { TNumberNumericalExpressionData } from '../../../../src/types/analyzers/number-numerical-expression-analyzer/TNumberNumericalExpressionData';
|
|
|
|
import { IInversifyContainerFacade } from '../../../../src/interfaces/container/IInversifyContainerFacade';
|
|
import { INumberNumericalExpressionAnalyzer } from '../../../../src/interfaces/analyzers/number-numerical-expression-analyzer/INumberNumericalExpressionAnalyzer';
|
|
|
|
import { InversifyContainerFacade } from '../../../../src/container/InversifyContainerFacade';
|
|
|
|
/**
|
|
* @param {TNumberNumericalExpressionData} data
|
|
* @returns {string}
|
|
*/
|
|
const numberNumericalExpressionDataToString = (data: TNumberNumericalExpressionData) =>
|
|
data
|
|
.map((part: number | number[]) => Array.isArray(part) ? part.join('*') : part)
|
|
.join('+')
|
|
.replace(/\+-/g, '-');
|
|
|
|
describe('NumberNumericalExpressionAnalyzer', function() {
|
|
let numberNumericalExpressionAnalyzer: INumberNumericalExpressionAnalyzer;
|
|
|
|
this.timeout(10000);
|
|
|
|
before(() => {
|
|
const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
|
|
|
|
inversifyContainerFacade.load('', '', {});
|
|
numberNumericalExpressionAnalyzer = inversifyContainerFacade
|
|
.get<INumberNumericalExpressionAnalyzer>(ServiceIdentifiers.INumberNumericalExpressionAnalyzer);
|
|
});
|
|
|
|
describe('analyze', () => {
|
|
let evaluatedResult: number;
|
|
|
|
describe('Positive numbers', () => {
|
|
describe('Variant #1: positive number', () => {
|
|
const number: number = 1234;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
|
|
describe('Variant #2: positive zero number', () => {
|
|
const number: number = 0;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
|
|
describe('Variant #3: positive big number', () => {
|
|
const number: number = Number.MAX_SAFE_INTEGER;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
|
|
describe('Variant #4: positive unsafe big number', () => {
|
|
const number: number = Number.MAX_SAFE_INTEGER + 1;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Negative numbers', () => {
|
|
describe('Variant #1: negative number', () => {
|
|
const number: number = -1234;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
|
|
describe('Variant #2: negative zero number', () => {
|
|
const number: number = -0;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
|
|
describe('Variant #3: negative big number', () => {
|
|
const number: number = Number.MIN_SAFE_INTEGER;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
|
|
describe('Variant #4: negative unsafe number', () => {
|
|
const number: number = Number.MIN_SAFE_INTEGER - 1;
|
|
|
|
before(() => {
|
|
const numberNumericalExpressionData: TNumberNumericalExpressionData =
|
|
numberNumericalExpressionAnalyzer.analyze(number);
|
|
|
|
evaluatedResult = eval(numberNumericalExpressionDataToString(numberNumericalExpressionData));
|
|
});
|
|
|
|
it('should return correct number numerical expression data', () => {
|
|
assert.equal(number, evaluatedResult);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('NaN', () => {
|
|
const number: number = NaN;
|
|
|
|
let testFunc: () => void;
|
|
|
|
before(() => {
|
|
testFunc = () => numberNumericalExpressionAnalyzer.analyze(number);
|
|
});
|
|
|
|
it('should throw error', () => {
|
|
assert.throw(testFunc, 'Given value is NaN');
|
|
});
|
|
});
|
|
});
|
|
});
|