8
0

contentnormalizer.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /**
  2. * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  4. */
  5. import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
  6. import ContentNormalizer from '../src/contentnormalizer';
  7. import { createDataTransfer } from './_utils/utils';
  8. import UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';
  9. describe( 'ContentNormalizer', () => {
  10. let normalizer, sinonTrigger;
  11. const templateData = {
  12. dataTransfer: createDataTransfer( {
  13. 'text/html': 'test data'
  14. } )
  15. };
  16. testUtils.createSinonSandbox();
  17. beforeEach( () => {
  18. sinonTrigger = sinon.fake.returns( true );
  19. normalizer = new ContentNormalizer( sinonTrigger );
  20. } );
  21. describe( 'constructor()', () => {
  22. it( 'should have assigned activation trigger', () => {
  23. expect( normalizer._activationTrigger ).to.be.a( 'function' );
  24. expect( normalizer._activationTrigger ).to.equal( sinonTrigger );
  25. } );
  26. } );
  27. describe( 'transform()', () => {
  28. let data;
  29. beforeEach( () => {
  30. data = Object.assign( {}, templateData );
  31. } );
  32. describe( 'valid data', () => {
  33. it( 'should mark data as transformed', () => {
  34. expect( data.isTransformedWithPasteFromOffice ).to.be.undefined;
  35. normalizer.transform( data );
  36. expect( data.isTransformedWithPasteFromOffice ).to.be.true;
  37. } );
  38. it( 'should call for activation trigger to check input data', () => {
  39. sinon.assert.notCalled( sinonTrigger );
  40. normalizer.transform( data );
  41. sinon.assert.calledOnce( sinonTrigger );
  42. sinon.assert.calledWith( sinonTrigger, 'test data' );
  43. } );
  44. it( 'should execute filters over data', () => {
  45. const filter = sinon.fake();
  46. const writer = new UpcastWriter();
  47. const documentFragment = writer.createDocumentFragment();
  48. data.content = documentFragment;
  49. normalizer.addFilter( filter );
  50. normalizer.transform( data );
  51. sinon.assert.calledOnce( filter );
  52. sinon.assert.calledWithMatch( filter, {
  53. documentFragment,
  54. data,
  55. writer: sinon.match.instanceOf( UpcastWriter )
  56. } );
  57. } );
  58. it( 'should not process again already transformed data', () => {
  59. const filter = sinon.fake();
  60. // Filters should not be executed
  61. data.isTransformedWithPasteFromOffice = true;
  62. normalizer.addFilter( filter );
  63. normalizer.transform( data );
  64. sinon.assert.notCalled( filter );
  65. } );
  66. } );
  67. describe( 'invalid data', () => {
  68. let normalizer, sinonTrigger;
  69. beforeEach( () => {
  70. sinonTrigger = sinon.fake.returns( false );
  71. normalizer = new ContentNormalizer( sinonTrigger );
  72. } );
  73. it( 'should not change data content', () => {
  74. normalizer.transform( data );
  75. expect( data.isTransformedWithPasteFromOffice ).to.be.undefined;
  76. expect( data ).to.deep.equal( templateData );
  77. } );
  78. it( 'should not fire any filter', () => {
  79. const filter = sinon.fake();
  80. normalizer.addFilter( filter );
  81. normalizer.transform( data );
  82. expect( normalizer._filters.size ).to.equal( 1 );
  83. sinon.assert.notCalled( filter );
  84. } );
  85. } );
  86. } );
  87. describe( 'addFilter()', () => {
  88. let filter;
  89. beforeEach( () => {
  90. filter = () => {};
  91. normalizer.addFilter( filter );
  92. } );
  93. it( 'should add filter to fullContentFilters set', () => {
  94. expect( normalizer._filters.size ).to.equal( 1 );
  95. const firstFilter = [ ...normalizer._filters ][ 0 ];
  96. expect( firstFilter ).to.equal( filter );
  97. } );
  98. } );
  99. } );