Index: trunk/extensions/VisualEditor/tests/es/es.TransactionProcessor.test.js |
— | — | @@ -0,0 +1,244 @@ |
| 2 | +module( 'es' ); |
| 3 | + |
| 4 | +test( 'es.TransactionProcessor', 18, function() { |
| 5 | + var documentModel = es.DocumentModel.newFromPlainObject( esTest.obj ); |
| 6 | + |
| 7 | + // FIXME: These tests shouldn't use prepareFoo() because those functions |
| 8 | + // normalize the transactions they create and are tested separately. |
| 9 | + // We should be creating transactions directly and feeding those into |
| 10 | + // commit()/rollback() --Roan |
| 11 | + var elementAttributeChange = documentModel.prepareElementAttributeChange( |
| 12 | + 0, 'set', 'test', 1 |
| 13 | + ); |
| 14 | + |
| 15 | + // Test 1 |
| 16 | + es.TransactionProcessor.commit( documentModel, elementAttributeChange ); |
| 17 | + deepEqual( |
| 18 | + documentModel.getData( new es.Range( 0, 5 ) ), |
| 19 | + [ |
| 20 | + { 'type': 'paragraph', 'attributes': { 'test': 1 } }, |
| 21 | + 'a', |
| 22 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 23 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 24 | + { 'type': '/paragraph' } |
| 25 | + ], |
| 26 | + 'commit applies an element attribute change transaction to the content' |
| 27 | + ); |
| 28 | + |
| 29 | + // Test 2 |
| 30 | + es.TransactionProcessor.rollback( documentModel, elementAttributeChange ); |
| 31 | + deepEqual( |
| 32 | + documentModel.getData( new es.Range( 0, 5 ) ), |
| 33 | + [ |
| 34 | + { 'type': 'paragraph' }, |
| 35 | + 'a', |
| 36 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 37 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 38 | + { 'type': '/paragraph' } |
| 39 | + ], |
| 40 | + 'rollback reverses the effect of an element attribute change transaction on the content' |
| 41 | + ); |
| 42 | + |
| 43 | + var contentAnnotation = documentModel.prepareContentAnnotation( |
| 44 | + new es.Range( 1, 4 ), 'set', { 'type': 'textStyle/bold' } |
| 45 | + ); |
| 46 | + |
| 47 | + // Test 3 |
| 48 | + es.TransactionProcessor.commit( documentModel, contentAnnotation ); |
| 49 | + deepEqual( |
| 50 | + documentModel.getData( new es.Range( 0, 5 ) ), |
| 51 | + [ |
| 52 | + { 'type': 'paragraph' }, |
| 53 | + ['a', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 54 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 55 | + [ |
| 56 | + 'c', |
| 57 | + { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }, |
| 58 | + { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' } |
| 59 | + ], |
| 60 | + { 'type': '/paragraph' } |
| 61 | + ], |
| 62 | + 'commit applies a content annotation transaction to the content' |
| 63 | + ); |
| 64 | + |
| 65 | + // Test 4 |
| 66 | + es.TransactionProcessor.rollback( documentModel, contentAnnotation ); |
| 67 | + deepEqual( |
| 68 | + documentModel.getData( new es.Range( 0, 5 ) ), |
| 69 | + [ |
| 70 | + { 'type': 'paragraph' }, |
| 71 | + 'a', |
| 72 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 73 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 74 | + { 'type': '/paragraph' } |
| 75 | + ], |
| 76 | + 'rollback reverses the effect of a content annotation transaction on the content' |
| 77 | + ); |
| 78 | + |
| 79 | + var insertion = documentModel.prepareInsertion( 3, ['d'] ); |
| 80 | + |
| 81 | + // Test 5 |
| 82 | + es.TransactionProcessor.commit( documentModel, insertion ); |
| 83 | + deepEqual( |
| 84 | + documentModel.getData( new es.Range( 0, 6 ) ), |
| 85 | + [ |
| 86 | + { 'type': 'paragraph' }, |
| 87 | + 'a', |
| 88 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 89 | + 'd', |
| 90 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 91 | + { 'type': '/paragraph' } |
| 92 | + ], |
| 93 | + 'commit applies an insertion transaction to the content' |
| 94 | + ); |
| 95 | + |
| 96 | + // Test 6 |
| 97 | + deepEqual( |
| 98 | + documentModel.getChildren()[0].getContent(), |
| 99 | + [ |
| 100 | + 'a', |
| 101 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 102 | + 'd', |
| 103 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
| 104 | + ], |
| 105 | + 'commit keeps model tree up to date with insertions' |
| 106 | + ); |
| 107 | + |
| 108 | + // Test 7 |
| 109 | + es.TransactionProcessor.rollback( documentModel, insertion ); |
| 110 | + deepEqual( |
| 111 | + documentModel.getData( new es.Range( 0, 5 ) ), |
| 112 | + [ |
| 113 | + { 'type': 'paragraph' }, |
| 114 | + 'a', |
| 115 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 116 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 117 | + { 'type': '/paragraph' } |
| 118 | + ], |
| 119 | + 'rollback reverses the effect of an insertion transaction on the content' |
| 120 | + ); |
| 121 | + |
| 122 | + // Test 8 |
| 123 | + deepEqual( |
| 124 | + documentModel.getChildren()[0].getContent(), |
| 125 | + [ |
| 126 | + 'a', |
| 127 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 128 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
| 129 | + ], |
| 130 | + 'rollback keeps model tree up to date with insertions' |
| 131 | + ); |
| 132 | + |
| 133 | + var removal = documentModel.prepareRemoval( new es.Range( 2, 4 ) ); |
| 134 | + |
| 135 | + // Test 9 |
| 136 | + es.TransactionProcessor.commit( documentModel, removal ); |
| 137 | + deepEqual( |
| 138 | + documentModel.getData( new es.Range( 0, 3 ) ), |
| 139 | + [ |
| 140 | + { 'type': 'paragraph' }, |
| 141 | + 'a', |
| 142 | + { 'type': '/paragraph' } |
| 143 | + ], |
| 144 | + 'commit applies a removal transaction to the content' |
| 145 | + ); |
| 146 | + |
| 147 | + // Test 10 |
| 148 | + deepEqual( |
| 149 | + documentModel.getChildren()[0].getContent(), |
| 150 | + ['a'], |
| 151 | + 'commit keeps model tree up to date with removals' |
| 152 | + ); |
| 153 | + |
| 154 | + // Test 11 |
| 155 | + es.TransactionProcessor.rollback( documentModel, removal ); |
| 156 | + deepEqual( |
| 157 | + documentModel.getData( new es.Range( 0, 5 ) ), |
| 158 | + [ |
| 159 | + { 'type': 'paragraph' }, |
| 160 | + 'a', |
| 161 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 162 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 163 | + { 'type': '/paragraph' } |
| 164 | + ], |
| 165 | + 'rollback reverses the effect of a removal transaction on the content' |
| 166 | + ); |
| 167 | + |
| 168 | + // Test 12 |
| 169 | + deepEqual( |
| 170 | + documentModel.getChildren()[0].getContent(), |
| 171 | + [ |
| 172 | + 'a', |
| 173 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 174 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
| 175 | + ], |
| 176 | + 'rollback keeps model tree up to date with removals' |
| 177 | + ); |
| 178 | + |
| 179 | + var paragraphBreak = documentModel.prepareInsertion( 2, [ { 'type': '/paragraph' }, { 'type': 'paragraph' } ] ); |
| 180 | + |
| 181 | + // Test 13 |
| 182 | + es.TransactionProcessor.commit( documentModel, paragraphBreak ); |
| 183 | + deepEqual( |
| 184 | + documentModel.getData( new es.Range( 0, 7 ) ), |
| 185 | + [ |
| 186 | + { 'type': 'paragraph' }, |
| 187 | + 'a', |
| 188 | + { 'type': '/paragraph' }, |
| 189 | + { 'type': 'paragraph' }, |
| 190 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 191 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 192 | + { 'type': '/paragraph' } |
| 193 | + ], |
| 194 | + 'commit applies an insertion transaction that splits the paragraph' |
| 195 | + ); |
| 196 | + |
| 197 | + // Test 14 |
| 198 | + deepEqual( |
| 199 | + documentModel.getChildren()[0].getContent(), |
| 200 | + ['a'], |
| 201 | + 'commit keeps model tree up to date with paragraph split (paragraph 1)' |
| 202 | + ); |
| 203 | + |
| 204 | + // Test 15 |
| 205 | + deepEqual( |
| 206 | + documentModel.getChildren()[1].getContent(), |
| 207 | + [ |
| 208 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 209 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
| 210 | + ], |
| 211 | + 'commit keeps model tree up to date with paragraph split (paragraph 2)' |
| 212 | + ); |
| 213 | + |
| 214 | + // Test 16 |
| 215 | + es.TransactionProcessor.rollback( documentModel, paragraphBreak ); |
| 216 | + deepEqual( |
| 217 | + documentModel.getData( new es.Range( 0, 5 ) ), |
| 218 | + [ |
| 219 | + { 'type': 'paragraph' }, |
| 220 | + 'a', |
| 221 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 222 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
| 223 | + { 'type': '/paragraph' } |
| 224 | + ], |
| 225 | + 'rollback reverses the effect of a paragraph split on the content' |
| 226 | + ); |
| 227 | + |
| 228 | + // Test 17 |
| 229 | + deepEqual( |
| 230 | + documentModel.getChildren()[0].getContent(), |
| 231 | + [ |
| 232 | + 'a', |
| 233 | + ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
| 234 | + ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
| 235 | + ], |
| 236 | + 'rollback keeps model tree up to date with paragraph split (paragraphs are merged back)' |
| 237 | + ); |
| 238 | + |
| 239 | + // Test 18 |
| 240 | + deepEqual( |
| 241 | + documentModel.getChildren()[1].getElementType(), |
| 242 | + 'table', |
| 243 | + 'rollback keeps model tree up to date with paragraph split (table follows the paragraph)' |
| 244 | + ); |
| 245 | +} ); |
Index: trunk/extensions/VisualEditor/tests/es/index.html |
— | — | @@ -42,6 +42,7 @@ |
43 | 43 | <!-- Tests --> |
44 | 44 | <script src="es.testData.js"></script> |
45 | 45 | <script src="es.test.js"></script> |
| 46 | + <script src="es.TransactionProcessor.test.js"></script> |
46 | 47 | <script src="es.DocumentNode.test.js"></script> |
47 | 48 | <script src="es.DocumentModelBranchNode.test.js"></script> |
48 | 49 | <script src="es.DocumentModel.test.js"></script> |
Index: trunk/extensions/VisualEditor/tests/es/es.DocumentModel.test.js |
— | — | @@ -548,246 +548,3 @@ |
549 | 549 | 'prepareInsertion throws exception for malformed input' |
550 | 550 | ); |
551 | 551 | } ); |
552 | | - |
553 | | -test( 'es.DocumentModel.commit, es.DocumentModel.rollback', 18, function() { |
554 | | - var documentModel = es.DocumentModel.newFromPlainObject( esTest.obj ); |
555 | | - |
556 | | - // FIXME: These tests shouldn't use prepareFoo() because those functions |
557 | | - // normalize the transactions they create and are tested separately. |
558 | | - // We should be creating transactions directly and feeding those into |
559 | | - // commit()/rollback() --Roan |
560 | | - var elementAttributeChange = documentModel.prepareElementAttributeChange( |
561 | | - 0, 'set', 'test', 1 |
562 | | - ); |
563 | | - |
564 | | - // Test 1 |
565 | | - documentModel.commit( elementAttributeChange ); |
566 | | - deepEqual( |
567 | | - documentModel.getData( new es.Range( 0, 5 ) ), |
568 | | - [ |
569 | | - { 'type': 'paragraph', 'attributes': { 'test': 1 } }, |
570 | | - 'a', |
571 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
572 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
573 | | - { 'type': '/paragraph' } |
574 | | - ], |
575 | | - 'commit applies an element attribute change transaction to the content' |
576 | | - ); |
577 | | - |
578 | | - // Test 2 |
579 | | - documentModel.rollback( elementAttributeChange ); |
580 | | - deepEqual( |
581 | | - documentModel.getData( new es.Range( 0, 5 ) ), |
582 | | - [ |
583 | | - { 'type': 'paragraph' }, |
584 | | - 'a', |
585 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
586 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
587 | | - { 'type': '/paragraph' } |
588 | | - ], |
589 | | - 'rollback reverses the effect of an element attribute change transaction on the content' |
590 | | - ); |
591 | | - |
592 | | - var contentAnnotation = documentModel.prepareContentAnnotation( |
593 | | - new es.Range( 1, 4 ), 'set', { 'type': 'textStyle/bold' } |
594 | | - ); |
595 | | - |
596 | | - // Test 3 |
597 | | - documentModel.commit( contentAnnotation ); |
598 | | - deepEqual( |
599 | | - documentModel.getData( new es.Range( 0, 5 ) ), |
600 | | - [ |
601 | | - { 'type': 'paragraph' }, |
602 | | - ['a', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
603 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
604 | | - [ |
605 | | - 'c', |
606 | | - { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }, |
607 | | - { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' } |
608 | | - ], |
609 | | - { 'type': '/paragraph' } |
610 | | - ], |
611 | | - 'commit applies a content annotation transaction to the content' |
612 | | - ); |
613 | | - |
614 | | - // Test 4 |
615 | | - documentModel.rollback( contentAnnotation ); |
616 | | - deepEqual( |
617 | | - documentModel.getData( new es.Range( 0, 5 ) ), |
618 | | - [ |
619 | | - { 'type': 'paragraph' }, |
620 | | - 'a', |
621 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
622 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
623 | | - { 'type': '/paragraph' } |
624 | | - ], |
625 | | - 'rollback reverses the effect of a content annotation transaction on the content' |
626 | | - ); |
627 | | - |
628 | | - var insertion = documentModel.prepareInsertion( 3, ['d'] ); |
629 | | - |
630 | | - // Test 5 |
631 | | - documentModel.commit( insertion ); |
632 | | - deepEqual( |
633 | | - documentModel.getData( new es.Range( 0, 6 ) ), |
634 | | - [ |
635 | | - { 'type': 'paragraph' }, |
636 | | - 'a', |
637 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
638 | | - 'd', |
639 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
640 | | - { 'type': '/paragraph' } |
641 | | - ], |
642 | | - 'commit applies an insertion transaction to the content' |
643 | | - ); |
644 | | - |
645 | | - // Test 6 |
646 | | - deepEqual( |
647 | | - documentModel.getChildren()[0].getContent(), |
648 | | - [ |
649 | | - 'a', |
650 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
651 | | - 'd', |
652 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
653 | | - ], |
654 | | - 'commit keeps model tree up to date with insertions' |
655 | | - ); |
656 | | - |
657 | | - // Test 7 |
658 | | - documentModel.rollback( insertion ); |
659 | | - deepEqual( |
660 | | - documentModel.getData( new es.Range( 0, 5 ) ), |
661 | | - [ |
662 | | - { 'type': 'paragraph' }, |
663 | | - 'a', |
664 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
665 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
666 | | - { 'type': '/paragraph' } |
667 | | - ], |
668 | | - 'rollback reverses the effect of an insertion transaction on the content' |
669 | | - ); |
670 | | - |
671 | | - // Test 8 |
672 | | - deepEqual( |
673 | | - documentModel.getChildren()[0].getContent(), |
674 | | - [ |
675 | | - 'a', |
676 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
677 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
678 | | - ], |
679 | | - 'rollback keeps model tree up to date with insertions' |
680 | | - ); |
681 | | - |
682 | | - var removal = documentModel.prepareRemoval( new es.Range( 2, 4 ) ); |
683 | | - |
684 | | - // Test 9 |
685 | | - documentModel.commit( removal ); |
686 | | - deepEqual( |
687 | | - documentModel.getData( new es.Range( 0, 3 ) ), |
688 | | - [ |
689 | | - { 'type': 'paragraph' }, |
690 | | - 'a', |
691 | | - { 'type': '/paragraph' } |
692 | | - ], |
693 | | - 'commit applies a removal transaction to the content' |
694 | | - ); |
695 | | - |
696 | | - // Test 10 |
697 | | - deepEqual( |
698 | | - documentModel.getChildren()[0].getContent(), |
699 | | - ['a'], |
700 | | - 'commit keeps model tree up to date with removals' |
701 | | - ); |
702 | | - |
703 | | - // Test 11 |
704 | | - documentModel.rollback( removal ); |
705 | | - deepEqual( |
706 | | - documentModel.getData( new es.Range( 0, 5 ) ), |
707 | | - [ |
708 | | - { 'type': 'paragraph' }, |
709 | | - 'a', |
710 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
711 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
712 | | - { 'type': '/paragraph' } |
713 | | - ], |
714 | | - 'rollback reverses the effect of a removal transaction on the content' |
715 | | - ); |
716 | | - |
717 | | - // Test 12 |
718 | | - deepEqual( |
719 | | - documentModel.getChildren()[0].getContent(), |
720 | | - [ |
721 | | - 'a', |
722 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
723 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
724 | | - ], |
725 | | - 'rollback keeps model tree up to date with removals' |
726 | | - ); |
727 | | - |
728 | | - var paragraphBreak = documentModel.prepareInsertion( 2, [ { 'type': '/paragraph' }, { 'type': 'paragraph' } ] ); |
729 | | - |
730 | | - // Test 13 |
731 | | - documentModel.commit( paragraphBreak ); |
732 | | - deepEqual( |
733 | | - documentModel.getData( new es.Range( 0, 7 ) ), |
734 | | - [ |
735 | | - { 'type': 'paragraph' }, |
736 | | - 'a', |
737 | | - { 'type': '/paragraph' }, |
738 | | - { 'type': 'paragraph' }, |
739 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
740 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
741 | | - { 'type': '/paragraph' } |
742 | | - ], |
743 | | - 'commit applies an insertion transaction that splits the paragraph' |
744 | | - ); |
745 | | - |
746 | | - // Test 14 |
747 | | - deepEqual( |
748 | | - documentModel.getChildren()[0].getContent(), |
749 | | - ['a'], |
750 | | - 'commit keeps model tree up to date with paragraph split (paragraph 1)' |
751 | | - ); |
752 | | - |
753 | | - // Test 15 |
754 | | - deepEqual( |
755 | | - documentModel.getChildren()[1].getContent(), |
756 | | - [ |
757 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
758 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
759 | | - ], |
760 | | - 'commit keeps model tree up to date with paragraph split (paragraph 2)' |
761 | | - ); |
762 | | - |
763 | | - // Test 16 |
764 | | - documentModel.rollback( paragraphBreak ); |
765 | | - deepEqual( |
766 | | - documentModel.getData( new es.Range( 0, 5 ) ), |
767 | | - [ |
768 | | - { 'type': 'paragraph' }, |
769 | | - 'a', |
770 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
771 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }], |
772 | | - { 'type': '/paragraph' } |
773 | | - ], |
774 | | - 'rollback reverses the effect of a paragraph split on the content' |
775 | | - ); |
776 | | - |
777 | | - // Test 17 |
778 | | - deepEqual( |
779 | | - documentModel.getChildren()[0].getContent(), |
780 | | - [ |
781 | | - 'a', |
782 | | - ['b', { 'type': 'textStyle/bold', 'hash': '#textStyle/bold' }], |
783 | | - ['c', { 'type': 'textStyle/italic', 'hash': '#textStyle/italic' }] |
784 | | - ], |
785 | | - 'rollback keeps model tree up to date with paragraph split (paragraphs are merged back)' |
786 | | - ); |
787 | | - |
788 | | - // Test 18 |
789 | | - deepEqual( |
790 | | - documentModel.getChildren()[1].getElementType(), |
791 | | - 'table', |
792 | | - 'rollback keeps model tree up to date with paragraph split (table follows the paragraph)' |
793 | | - ); |
794 | | -} ); |