r103066 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r103065‎ | r103066 | r103067 >
Date:23:10, 14 November 2011
Author:tparscal
Status:deferred
Tags:
Comment:
Moved tests for es.TransactionProcessor to their own file
Modified paths:
  • /trunk/extensions/VisualEditor/tests/es/es.DocumentModel.test.js (modified) (history)
  • /trunk/extensions/VisualEditor/tests/es/es.TransactionProcessor.test.js (added) (history)
  • /trunk/extensions/VisualEditor/tests/es/index.html (modified) (history)

Diff [purge]

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 @@
4343 <!-- Tests -->
4444 <script src="es.testData.js"></script>
4545 <script src="es.test.js"></script>
 46+ <script src="es.TransactionProcessor.test.js"></script>
4647 <script src="es.DocumentNode.test.js"></script>
4748 <script src="es.DocumentModelBranchNode.test.js"></script>
4849 <script src="es.DocumentModel.test.js"></script>
Index: trunk/extensions/VisualEditor/tests/es/es.DocumentModel.test.js
@@ -548,246 +548,3 @@
549549 'prepareInsertion throws exception for malformed input'
550550 );
551551 } );
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 -} );

Status & tagging log