SourceMapCorrector.spec.ts 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { IObfuscationResult } from "../../src/interfaces/IObfuscationResult";
  2. import { ISourceMapCorrector } from "../../src/interfaces/ISourceMapCorrector";
  3. import { TSourceMapMode } from "../../src/types/TSourceMapMode";
  4. import { SourceMapMode } from "../../src/enums/SourceMapMode";
  5. import { ObfuscationResult } from "../../src/ObfuscationResult";
  6. import { SourceMapCorrector } from "../../src/SourceMapCorrector";
  7. const assert: Chai.AssertStatic = require('chai').assert;
  8. /**
  9. * @param obfuscatedCode
  10. * @param sourceMap
  11. * @param sourceMapUrl
  12. * @param sourceMapMode
  13. */
  14. function getCorrectedObfuscationResult (
  15. obfuscatedCode: string,
  16. sourceMap: string,
  17. sourceMapUrl: string,
  18. sourceMapMode: TSourceMapMode
  19. ): IObfuscationResult {
  20. let obfuscationResult: IObfuscationResult = new ObfuscationResult(obfuscatedCode, sourceMap),
  21. sourceMapCorrector: ISourceMapCorrector = new SourceMapCorrector(
  22. obfuscationResult,
  23. sourceMapUrl,
  24. sourceMapMode
  25. );
  26. return sourceMapCorrector.correct();
  27. }
  28. describe('SourceMapCorrector', () => {
  29. describe('correct (): IObfuscationResult', () => {
  30. let expectedObfuscationResult: IObfuscationResult,
  31. obfuscatedCode: string = 'var test = 1;',
  32. sourceMap: string = 'test';
  33. it('should return untouched obfuscated code if source map does not exist', () => {
  34. expectedObfuscationResult = getCorrectedObfuscationResult(obfuscatedCode, '', '', SourceMapMode.Separate);
  35. assert.equal(expectedObfuscationResult.getObfuscatedCode(), obfuscatedCode);
  36. });
  37. describe('if source map is set and source map mode is `inline`', () => {
  38. before (() => {
  39. expectedObfuscationResult = getCorrectedObfuscationResult(
  40. obfuscatedCode,
  41. sourceMap,
  42. '',
  43. SourceMapMode.Inline
  44. );
  45. });
  46. it('should add source map to obfuscated code as base64 encoded string', () => {
  47. assert.match(expectedObfuscationResult.getObfuscatedCode(), /data:application\/json;base64/);
  48. });
  49. it('should clear original source map', () => {
  50. assert.equal(expectedObfuscationResult.getSourceMap(), '');
  51. });
  52. });
  53. it('should add source map import to obfuscated code if source map mode is `separate`', () => {
  54. expectedObfuscationResult = getCorrectedObfuscationResult(
  55. obfuscatedCode,
  56. sourceMap,
  57. 'output.js.map',
  58. SourceMapMode.Separate
  59. );
  60. assert.match(expectedObfuscationResult.getObfuscatedCode(), /sourceMappingURL=output\.js\.map/);
  61. });
  62. it('should not touch obfuscated code if source map mode is `separate` and `sourceMapUrl` is not set', () => {
  63. expectedObfuscationResult = getCorrectedObfuscationResult(
  64. obfuscatedCode,
  65. sourceMap,
  66. '',
  67. SourceMapMode.Separate
  68. );
  69. assert.equal(expectedObfuscationResult.getObfuscatedCode(), obfuscatedCode);
  70. });
  71. });
  72. });