editableelement.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /**
  2. * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. import createDocumentMock from 'ckeditor5-engine/tests/view/_utils/createdocumentmock';
  6. import RootEditableElement from 'ckeditor5-engine/src/view/rooteditableelement';
  7. import Range from 'ckeditor5-engine/src/view/range';
  8. describe( 'EditableElement', () => {
  9. describe( 'isFocused', () => {
  10. let docMock, viewMain, viewHeader;
  11. beforeEach( () => {
  12. docMock = createDocumentMock();
  13. viewMain = new RootEditableElement( 'div' );
  14. viewMain.document = docMock;
  15. viewHeader = new RootEditableElement( 'h1' );
  16. viewHeader.document = docMock;
  17. viewHeader.rootName = 'header';
  18. } );
  19. it( 'should be observable', () => {
  20. const root = new RootEditableElement( 'div' );
  21. root.document = createDocumentMock();
  22. expect( root.isFocused ).to.be.false;
  23. const isFocusedSpy = sinon.spy();
  24. root.on( 'change:isFocused', isFocusedSpy );
  25. root.isFocused = true;
  26. expect( root.isFocused ).to.be.true;
  27. expect( isFocusedSpy.calledOnce ).to.be.true;
  28. } );
  29. it( 'should change isFocused on document render event', () => {
  30. const rangeMain = Range.createFromParentsAndOffsets( viewMain, 0, viewMain, 0 );
  31. const rangeHeader = Range.createFromParentsAndOffsets( viewHeader, 0, viewHeader, 0 );
  32. docMock.selection.addRange( rangeMain );
  33. docMock.isFocused = true;
  34. expect( viewMain.isFocused ).to.be.true;
  35. expect( viewHeader.isFocused ).to.be.false;
  36. docMock.selection.setRanges( [ rangeHeader ] );
  37. docMock.fire( 'render' );
  38. expect( viewMain.isFocused ).to.be.false;
  39. expect( viewHeader.isFocused ).to.be.true;
  40. } );
  41. it( 'should change isFocused when document.isFocus changes', () => {
  42. const rangeMain = Range.createFromParentsAndOffsets( viewMain, 0, viewMain, 0 );
  43. const rangeHeader = Range.createFromParentsAndOffsets( viewHeader, 0, viewHeader, 0 );
  44. docMock.selection.addRange( rangeMain );
  45. docMock.isFocused = true;
  46. expect( viewMain.isFocused ).to.be.true;
  47. expect( viewHeader.isFocused ).to.be.false;
  48. docMock.isFocused = false;
  49. expect( viewMain.isFocused ).to.be.false;
  50. expect( viewHeader.isFocused ).to.be.false;
  51. docMock.selection.setRanges( [ rangeHeader ] );
  52. expect( viewMain.isFocused ).to.be.false;
  53. expect( viewHeader.isFocused ).to.be.false;
  54. } );
  55. } );
  56. describe( 'isReadOnly', () => {
  57. it( 'should be observable', () => {
  58. const root = new RootEditableElement( 'div' );
  59. root.document = createDocumentMock();
  60. expect( root.isReadOnly ).to.be.false;
  61. const isReadOnlySpy = sinon.spy();
  62. root.on( 'change:isReadOnly', isReadOnlySpy );
  63. root.isReadOnly = true;
  64. expect( root.isReadOnly ).to.be.true;
  65. expect( isReadOnlySpy.calledOnce ).to.be.true;
  66. } );
  67. } );
  68. describe( 'getDocument', ()=> {
  69. it( 'should return document', () => {
  70. const docMock = createDocumentMock();
  71. const root = new RootEditableElement( 'div' );
  72. root.document = docMock;
  73. expect( root.document ).to.equal( docMock );
  74. } );
  75. } );
  76. } );