Index: trunk/parsers/wikidom/tests/hype/es.DocumentModel.test.js |
— | — | @@ -414,22 +414,22 @@ |
415 | 415 | |
416 | 416 | // Test 1 |
417 | 417 | deepEqual( |
418 | | - documentModel.prepareElementAttributeChange( 0, 'set', 'test', 1234 ), |
419 | | - new es.Transaction( [ |
| 418 | + documentModel.prepareElementAttributeChange( 0, 'set', 'test', 1234 ).getOperations(), |
| 419 | + [ |
420 | 420 | { 'type': 'attribute', 'method': 'set', 'key': 'test', 'value': 1234 }, |
421 | 421 | { 'type': 'retain', 'length': 28 } |
422 | | - ] ), |
| 422 | + ], |
423 | 423 | 'prepareElementAttributeChange retains data after attribute change for first element' |
424 | 424 | ); |
425 | 425 | |
426 | 426 | // Test 2 |
427 | 427 | deepEqual( |
428 | | - documentModel.prepareElementAttributeChange( 5, 'set', 'test', 1234 ), |
429 | | - new es.Transaction( [ |
| 428 | + documentModel.prepareElementAttributeChange( 5, 'set', 'test', 1234 ).getOperations(), |
| 429 | + [ |
430 | 430 | { 'type': 'retain', 'length': 5 }, |
431 | 431 | { 'type': 'attribute', 'method': 'set', 'key': 'test', 'value': 1234 }, |
432 | 432 | { 'type': 'retain', 'length': 23 } |
433 | | - ] ), |
| 433 | + ], |
434 | 434 | 'prepareElementAttributeChange retains data before and after attribute change' |
435 | 435 | ); |
436 | 436 | |
— | — | @@ -459,8 +459,10 @@ |
460 | 460 | |
461 | 461 | // Test 1 |
462 | 462 | deepEqual( |
463 | | - documentModel.prepareContentAnnotation( new es.Range( 1, 4 ), 'set', { 'type': 'bold' } ), |
464 | | - new es.Transaction( [ |
| 463 | + documentModel.prepareContentAnnotation( |
| 464 | + new es.Range( 1, 4 ), 'set', { 'type': 'bold' } |
| 465 | + ).getOperations(), |
| 466 | + [ |
465 | 467 | { 'type': 'retain', 'length': 1 }, |
466 | 468 | { |
467 | 469 | 'type': 'annotate', |
— | — | @@ -490,7 +492,7 @@ |
491 | 493 | 'annotation': { 'type': 'bold', 'hash': '#bold' } |
492 | 494 | }, |
493 | 495 | { 'type': 'retain', 'length': 24 } |
494 | | - ] ), |
| 496 | + ], |
495 | 497 | 'prepareContentAnnotation skips over content that is already set or cleared' |
496 | 498 | ); |
497 | 499 | } ); |
— | — | @@ -500,8 +502,8 @@ |
501 | 503 | |
502 | 504 | // Test 1 |
503 | 505 | deepEqual( |
504 | | - documentModel.prepareRemoval( new es.Range( 1, 4 ) ), |
505 | | - new es.Transaction( [ |
| 506 | + documentModel.prepareRemoval( new es.Range( 1, 4 ) ).getOperations(), |
| 507 | + [ |
506 | 508 | { 'type': 'retain', 'length': 1 }, |
507 | 509 | { |
508 | 510 | 'type': 'remove', |
— | — | @@ -512,14 +514,14 @@ |
513 | 515 | ] |
514 | 516 | }, |
515 | 517 | { 'type': 'retain', 'length': 24 } |
516 | | - ] ), |
| 518 | + ], |
517 | 519 | 'prepareRemoval includes the content being removed' |
518 | 520 | ); |
519 | 521 | |
520 | 522 | // Test 2 |
521 | 523 | deepEqual( |
522 | | - documentModel.prepareRemoval( new es.Range( 15, 18 ) ), |
523 | | - new es.Transaction( [ |
| 524 | + documentModel.prepareRemoval( new es.Range( 15, 18 ) ).getOperations(), |
| 525 | + [ |
524 | 526 | { 'type': 'retain', 'length': 15 }, |
525 | 527 | { |
526 | 528 | 'type': 'remove', |
— | — | @@ -530,14 +532,14 @@ |
531 | 533 | ] |
532 | 534 | }, |
533 | 535 | { 'type': 'retain', 'length': 10 } |
534 | | - ] ), |
| 536 | + ], |
535 | 537 | 'prepareRemoval removes entire elements' |
536 | 538 | ); |
537 | 539 | |
538 | 540 | // Test 3 |
539 | 541 | deepEqual( |
540 | | - documentModel.prepareRemoval( new es.Range( 17, 19 ) ), |
541 | | - new es.Transaction( [ |
| 542 | + documentModel.prepareRemoval( new es.Range( 17, 19 ) ).getOperations(), |
| 543 | + [ |
542 | 544 | { 'type': 'retain', 'length': 17 }, |
543 | 545 | { |
544 | 546 | 'type': 'remove', |
— | — | @@ -547,7 +549,7 @@ |
548 | 550 | ] |
549 | 551 | }, |
550 | 552 | { 'type': 'retain', 'length': 9 } |
551 | | - ] ), |
| 553 | + ], |
552 | 554 | 'prepareRemoval merges two list items' |
553 | 555 | ); |
554 | 556 | } ); |
— | — | @@ -557,129 +559,120 @@ |
558 | 560 | |
559 | 561 | // Test 1 |
560 | 562 | deepEqual( |
561 | | - documentModel.prepareInsertion( 1, ['d', 'e', 'f'] ), |
562 | | - new es.Transaction( [ |
| 563 | + documentModel.prepareInsertion( 1, ['d', 'e', 'f'] ).getOperations(), |
| 564 | + [ |
563 | 565 | { 'type': 'retain', 'length': 1 }, |
564 | 566 | { 'type': 'insert', 'data': ['d', 'e', 'f'] }, |
565 | 567 | { 'type': 'retain', 'length': 27 } |
566 | | - ] ), |
| 568 | + ], |
567 | 569 | 'prepareInsertion retains data up to the offset and includes the content being inserted' |
568 | 570 | ); |
569 | 571 | |
570 | 572 | // Test 2 |
571 | 573 | deepEqual( |
572 | 574 | documentModel.prepareInsertion( |
573 | | - 5, |
574 | | - [{ 'type': 'paragraph' }, 'd', 'e', 'f', { 'type': '/paragraph' }] |
575 | | - ), |
576 | | - new es.Transaction( [ |
| 575 | + 5, [{ 'type': 'paragraph' }, 'd', 'e', 'f', { 'type': '/paragraph' }] |
| 576 | + ).getOperations(), |
| 577 | + [ |
577 | 578 | { 'type': 'retain', 'length': 5 }, |
578 | 579 | { |
579 | 580 | 'type': 'insert', |
580 | 581 | 'data': [{ 'type': 'paragraph' }, 'd', 'e', 'f', { 'type': '/paragraph' }] |
581 | 582 | }, |
582 | 583 | { 'type': 'retain', 'length': 23 } |
583 | | - ] ), |
| 584 | + ], |
584 | 585 | 'prepareInsertion inserts a paragraph between two structural elements' |
585 | 586 | ); |
586 | 587 | |
587 | 588 | // Test 3 |
588 | 589 | deepEqual( |
589 | | - documentModel.prepareInsertion( |
590 | | - 5, |
591 | | - ['d', 'e', 'f'] |
592 | | - ), |
593 | | - new es.Transaction( [ |
| 590 | + documentModel.prepareInsertion( 5, ['d', 'e', 'f'] ).getOperations(), |
| 591 | + [ |
594 | 592 | { 'type': 'retain', 'length': 5 }, |
595 | 593 | { |
596 | 594 | 'type': 'insert', |
597 | 595 | 'data': [{ 'type': 'paragraph' }, 'd', 'e', 'f', { 'type': '/paragraph' }] |
598 | 596 | }, |
599 | 597 | { 'type': 'retain', 'length': 23 } |
600 | | - ] ), |
| 598 | + ], |
601 | 599 | 'prepareInsertion wraps unstructured content inserted between elements in a paragraph' |
602 | 600 | ); |
603 | 601 | |
604 | 602 | // Test 4 |
605 | 603 | deepEqual( |
606 | 604 | documentModel.prepareInsertion( |
607 | | - 5, |
608 | | - [{ 'type': 'paragraph' }, 'd', 'e', 'f'] |
609 | | - ), |
610 | | - new es.Transaction( [ |
| 605 | + 5, [{ 'type': 'paragraph' }, 'd', 'e', 'f'] |
| 606 | + ).getOperations(), |
| 607 | + [ |
611 | 608 | { 'type': 'retain', 'length': 5 }, |
612 | 609 | { |
613 | 610 | 'type': 'insert', |
614 | 611 | 'data': [{ 'type': 'paragraph' }, 'd', 'e', 'f', { 'type': '/paragraph' }] |
615 | 612 | }, |
616 | 613 | { 'type': 'retain', 'length': 23 } |
617 | | - ] ), |
| 614 | + ], |
618 | 615 | 'prepareInsertion completes opening elements in inserted content' |
619 | 616 | ); |
620 | 617 | |
621 | 618 | // Test 5 |
622 | 619 | deepEqual( |
623 | 620 | documentModel.prepareInsertion( |
624 | | - 2, |
625 | | - [ { 'type': 'table' }, { 'type': '/table' } ] |
626 | | - ), |
627 | | - new es.Transaction( [ |
| 621 | + 2, [ { 'type': 'table' }, { 'type': '/table' } ] |
| 622 | + ).getOperations(), |
| 623 | + [ |
628 | 624 | { 'type': 'retain', 'length': 2 }, |
629 | 625 | { |
630 | 626 | 'type': 'insert', |
631 | 627 | 'data': [ { 'type': '/paragraph' }, { 'type': 'table' }, { 'type': '/table' }, { 'type': 'paragraph' } ] |
632 | 628 | }, |
633 | 629 | { 'type': 'retain', 'length': 26 } |
634 | | - ] ), |
| 630 | + ], |
635 | 631 | 'prepareInsertion splits up paragraph when inserting a table in the middle' |
636 | 632 | ); |
637 | 633 | |
638 | 634 | // Test 6 |
639 | 635 | deepEqual( |
640 | 636 | documentModel.prepareInsertion( |
641 | | - 2, |
642 | | - [ 'f', 'o', 'o', { 'type': '/paragraph' }, { 'type': 'paragraph' }, 'b', 'a', 'r' ] |
643 | | - ), |
644 | | - new es.Transaction( [ |
| 637 | + 2, [ 'f', 'o', 'o', { 'type': '/paragraph' }, { 'type': 'paragraph' }, 'b', 'a', 'r' ] |
| 638 | + ).getOperations(), |
| 639 | + [ |
645 | 640 | { 'type': 'retain', 'length': 2 }, |
646 | 641 | { |
647 | 642 | 'type': 'insert', |
648 | 643 | 'data': [ 'f', 'o', 'o', { 'type': '/paragraph' }, { 'type': 'paragraph' }, 'b', 'a', 'r' ] |
649 | 644 | }, |
650 | 645 | { 'type': 'retain', 'length': 26 } |
651 | | - ] ), |
| 646 | + ], |
652 | 647 | 'prepareInsertion splits up paragraph when inserting a paragraph closing and opening into a paragraph' |
653 | 648 | ); |
654 | 649 | |
655 | 650 | // Test 7 |
656 | 651 | deepEqual( |
657 | 652 | documentModel.prepareInsertion( |
658 | | - 0, |
659 | | - [ { 'type': 'paragraph' }, 'f', 'o', 'o', { 'type': '/paragraph' } ] |
660 | | - ), |
661 | | - new es.Transaction( [ |
| 653 | + 0, [ { 'type': 'paragraph' }, 'f', 'o', 'o', { 'type': '/paragraph' } ] |
| 654 | + ).getOperations(), |
| 655 | + [ |
662 | 656 | { |
663 | 657 | 'type': 'insert', |
664 | 658 | 'data': [ { 'type': 'paragraph' }, 'f', 'o', 'o', { 'type': '/paragraph' } ] |
665 | 659 | }, |
666 | 660 | { 'type': 'retain', 'length': 28 } |
667 | | - ] ), |
| 661 | + ], |
668 | 662 | 'prepareInsertion inserts at the beginning, then retains up to the end' |
669 | 663 | ); |
670 | 664 | |
671 | 665 | // Test 8 |
672 | 666 | deepEqual( |
673 | 667 | documentModel.prepareInsertion( |
674 | | - 28, |
675 | | - [ { 'type': 'paragraph' }, 'f', 'o', 'o', { 'type': '/paragraph' } ] |
676 | | - ), |
677 | | - new es.Transaction( [ |
| 668 | + 28, [ { 'type': 'paragraph' }, 'f', 'o', 'o', { 'type': '/paragraph' } ] |
| 669 | + ).getOperations(), |
| 670 | + [ |
678 | 671 | { 'type': 'retain', 'length': 28 }, |
679 | 672 | { |
680 | 673 | 'type': 'insert', |
681 | 674 | 'data': [ { 'type': 'paragraph' }, 'f', 'o', 'o', { 'type': '/paragraph' } ] |
682 | 675 | } |
683 | | - ] ), |
| 676 | + ], |
684 | 677 | 'prepareInsertion inserts at the end' |
685 | 678 | ); |
686 | 679 | |