| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | import { assert } from 'chai';import { readFileAsString } from '../../../../helpers/readFileAsString';import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes';import { IdentifierNamesGenerator } from '../../../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator';import { evaluateInWorker } from '../../../../helpers/evaluateInWorker';import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';describe('SelfDefendingTemplate', function () {    const evaluationTimeout: number = 3500;    this.timeout(10000);    describe('Variant #1: correctly obfuscate code with `HexadecimalIdentifierNamesGenerator``', () => {        const expectedEvaluationResult: number = 1;        let obfuscatedCode: string,            evaluationResult: number = 0;        before(() => {            const code: string = readFileAsString(__dirname + '/fixtures/input.js');            obfuscatedCode = JavaScriptObfuscator.obfuscate(                code,                {                    ...NO_ADDITIONAL_NODES_PRESET,                    selfDefending: true,                    identifierNamesGenerator: IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator                }            ).getObfuscatedCode();            return evaluateInWorker(obfuscatedCode, evaluationTimeout)                .then((result: string | null) => {                    if (!result) {                        return;                    }                    evaluationResult = parseInt(result, 10);                });        });        it('should correctly evaluate code with enabled self defending', () => {            assert.equal(evaluationResult, expectedEvaluationResult);        });    });    describe('Variant #2: correctly obfuscate code with `MangledIdentifierNamesGenerator` option', () => {        const expectedEvaluationResult: number = 1;        let obfuscatedCode: string,            evaluationResult: number = 0;        before(() => {            const code: string = readFileAsString(__dirname + '/fixtures/input.js');            obfuscatedCode = JavaScriptObfuscator.obfuscate(                code,                {                    ...NO_ADDITIONAL_NODES_PRESET,                    selfDefending: true,                    identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator                }            ).getObfuscatedCode();            return evaluateInWorker(obfuscatedCode, evaluationTimeout)                .then((result: string | null) => {                    if (!result) {                        return;                    }                    evaluationResult = parseInt(result, 10);                });        });        it('should correctly evaluate code with enabled self defending', () => {            assert.equal(evaluationResult, expectedEvaluationResult);        });    });    describe('Variant #3: correctly obfuscate code with `DictionaryIdentifierNamesGenerator` option', () => {        const expectedEvaluationResult: number = 1;        let obfuscatedCode: string,            evaluationResult: number = 0;        before(() => {            const code: string = readFileAsString(__dirname + '/fixtures/input.js');            obfuscatedCode = JavaScriptObfuscator.obfuscate(                code,                {                    ...NO_ADDITIONAL_NODES_PRESET,                    selfDefending: true,                    identifierNamesGenerator: IdentifierNamesGenerator.DictionaryIdentifierNamesGenerator,                    identifiersDictionary: ['foo', 'bar', 'baz', 'bark', 'hawk', 'eagle']                }            ).getObfuscatedCode();            return evaluateInWorker(obfuscatedCode, evaluationTimeout)                .then((result: string | null) => {                    if (!result) {                        return;                    }                    evaluationResult = parseInt(result, 10);                });        });        it('should correctly evaluate code with enabled self defending', () => {            assert.equal(evaluationResult, expectedEvaluationResult);        });    });    describe('Variant #4: obfuscated code with beautified self defending code', () => {        const expectedEvaluationResult: number = 0;        let obfuscatedCode: string,            evaluationResult: number = 0;        before(() => {            const code: string = readFileAsString(__dirname + '/fixtures/input.js');            obfuscatedCode = JavaScriptObfuscator.obfuscate(                code,                {                    ...NO_ADDITIONAL_NODES_PRESET,                    selfDefending: true                }            ).getObfuscatedCode();            obfuscatedCode = obfuscatedCode                .replace(/function\(\){/g, 'function () {')                .replace(/=/g, ' = ')                .replace(/,/g, ', ')                .replace(/;/g, '; ');            return evaluateInWorker(obfuscatedCode, evaluationTimeout)                .then((result: string | null) => {                    if (!result) {                        return;                    }                    evaluationResult = parseInt(result, 10);                });        });        it('should enter code in infinity loop', () => {            assert.equal(evaluationResult, expectedEvaluationResult);        });    });});
 |