StringArrayCodeHelper.spec.ts 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { assert } from 'chai';
  2. import { NO_ADDITIONAL_NODES_PRESET } from '../../../../src/options/presets/NoCustomNodes';
  3. import { getStringArrayRegExp } from '../../../helpers/get-string-array-regexp';
  4. import { readFileAsString } from '../../../helpers/readFileAsString';
  5. import { JavaScriptObfuscator } from '../../../../src/JavaScriptObfuscatorFacade';
  6. describe('StringArrayCodeHelper', () => {
  7. const stringArrayRegExp: RegExp = getStringArrayRegExp(['test']);
  8. describe('`stringArray` option is set', () => {
  9. const samplesCount: number = 100;
  10. const stringArrayAtFirstPositionRegExp: RegExp = new RegExp(`^${stringArrayRegExp.source}`);
  11. const variableDeclarationAtFirstPositionRegExp: RegExp = /^var test *= *_0x([a-f0-9]){4}\(0x0\);/;
  12. let obfuscatedCode: string;
  13. let stringArrayAtFirstPositionMatchesCount: number = 0;
  14. let variableDeclarationAtFirstPositionMatchesCount: number = 0;
  15. before(() => {
  16. const code: string = readFileAsString(__dirname + '/fixtures/simple-input.js');
  17. for (let i = 0; i < samplesCount; i++) {
  18. obfuscatedCode = JavaScriptObfuscator.obfuscate(
  19. code,
  20. {
  21. ...NO_ADDITIONAL_NODES_PRESET,
  22. stringArray: true,
  23. stringArrayThreshold: 1
  24. }
  25. ).getObfuscatedCode();
  26. if (obfuscatedCode.match(stringArrayAtFirstPositionRegExp)) {
  27. stringArrayAtFirstPositionMatchesCount++;
  28. }
  29. if (obfuscatedCode.match(variableDeclarationAtFirstPositionRegExp)) {
  30. variableDeclarationAtFirstPositionMatchesCount++;
  31. }
  32. }
  33. });
  34. it('Match #1: should correctly append code helper into the obfuscated code at random index', () => {
  35. assert.isAbove(stringArrayAtFirstPositionMatchesCount, 1);
  36. });
  37. it('Match #2: should correctly append code helper into the obfuscated code at random index', () => {
  38. assert.isAbove(variableDeclarationAtFirstPositionMatchesCount, 1);
  39. });
  40. });
  41. describe('`stringArray` option isn\'t set', () => {
  42. let obfuscatedCode: string;
  43. before(() => {
  44. const code: string = readFileAsString(__dirname + '/fixtures/simple-input.js');
  45. obfuscatedCode = JavaScriptObfuscator.obfuscate(
  46. code,
  47. {
  48. ...NO_ADDITIONAL_NODES_PRESET,
  49. stringArray: false
  50. }
  51. ).getObfuscatedCode();
  52. });
  53. it('shouldn\'t append code helper into the obfuscated code', () => {
  54. assert.notMatch(obfuscatedCode, stringArrayRegExp);
  55. });
  56. });
  57. });