Index: trunk/extensions/VisualEditor/tests/ve/ve.dm.DocumentNode.test.js |
— | — | @@ -801,7 +801,7 @@ |
802 | 802 | ); |
803 | 803 | } ); |
804 | 804 | |
805 | | -test( 've.dm.DocumentNode.prepareWrap', 5, function() { |
| 805 | +test( 've.dm.DocumentNode.prepareWrap', 6, function() { |
806 | 806 | var documentModel = ve.dm.DocumentNode.newFromPlainObject( veTest.obj ); |
807 | 807 | |
808 | 808 | // Test 1 |
— | — | @@ -838,6 +838,19 @@ |
839 | 839 | ); |
840 | 840 | |
841 | 841 | // Test 3 |
| 842 | + deepEqual( |
| 843 | + documentModel.prepareWrap( new ve.Range( 8, 28 ), [ { 'type': 'table' }, { 'type': 'tableRow' }, { 'type': 'tableCell' } ], [ { 'type': 'list' }, { 'type': 'listItem' } ], [], [] ).getOperations(), |
| 844 | + [ |
| 845 | + { 'type': 'retain', 'length': 5 }, |
| 846 | + { 'type': 'replace', 'remove': [ { 'type': 'table' }, { 'type': 'tableRow' }, { 'type': 'tableCell' } ], 'replacement': [ { 'type': 'list' }, { 'type': 'listItem' } ] }, |
| 847 | + { 'type': 'retain', 'length': 20 }, |
| 848 | + { 'type': 'replace', 'remove': [ { 'type': '/tableCell' }, { 'type': '/tableRow' }, { 'type': '/table' } ], 'replacement': [ { 'type': '/listItem' }, { 'type': '/list' } ] }, |
| 849 | + { 'type': 'retain', 'length': 3 } |
| 850 | + ], |
| 851 | + 'prepareWrap replaces a table with a list' |
| 852 | + ); |
| 853 | + |
| 854 | + // Test 4 |
842 | 855 | raises( |
843 | 856 | function() { |
844 | 857 | documentModel.prepareWrap( new ve.Range( 12, 27 ), [ { 'type': 'table' } ], [], [], [] ); |
— | — | @@ -846,7 +859,7 @@ |
847 | 860 | 'prepareWrap checks integrity of unwrapOuter parameter' |
848 | 861 | ); |
849 | 862 | |
850 | | - // Test 4 |
| 863 | + // Test 5 |
851 | 864 | raises( |
852 | 865 | function() { |
853 | 866 | documentModel.prepareWrap( new ve.Range( 12, 27 ), [ { 'type': 'list' } ], [], [ { 'type': 'paragraph' } ], [] ); |
— | — | @@ -855,7 +868,7 @@ |
856 | 869 | 'prepareWrap checks integrity of unwrapEach parameter' |
857 | 870 | ); |
858 | 871 | |
859 | | - // Test 5 |
| 872 | + // Test 6 |
860 | 873 | raises( |
861 | 874 | function() { |
862 | 875 | documentModel.prepareWrap( new ve.Range( 1, 4 ), [ { 'type': 'listItem' }, { 'type': 'paragraph' } ], [], [], [] ); |
Index: trunk/extensions/VisualEditor/tests/ve/ve.dm.TransactionProcessor.test.js |
— | — | @@ -1,6 +1,6 @@ |
2 | 2 | module( 've/dm' ); |
3 | 3 | |
4 | | -test( 've.dm.TransactionProcessor', 37, function() { |
| 4 | +test( 've.dm.TransactionProcessor', 39, function() { |
5 | 5 | var documentModel = ve.dm.DocumentNode.newFromPlainObject( veTest.obj ); |
6 | 6 | |
7 | 7 | // FIXME: These tests shouldn't use prepareFoo() because those functions |
— | — | @@ -490,4 +490,78 @@ |
491 | 491 | ], |
492 | 492 | 'rollback puts the list back' |
493 | 493 | ); |
| 494 | + |
| 495 | + var replaceTable = documentModel.prepareWrap( new ve.Range( 8, 28 ), [ { 'type': 'table' }, { 'type': 'tableRow' }, { 'type': 'tableCell' } ], |
| 496 | + [ { 'type': 'list' }, { 'type': 'listItem' } ], [], [] ); |
| 497 | + |
| 498 | + // Test 38 |
| 499 | + ve.dm.TransactionProcessor.commit( documentModel, replaceTable ); |
| 500 | + deepEqual( |
| 501 | + documentModel.getData( new ve.Range( 5, 30 ) ), |
| 502 | + [ |
| 503 | + { 'type': 'list' }, |
| 504 | + { 'type': 'listItem' }, |
| 505 | + { 'type': 'paragraph' }, |
| 506 | + 'd', |
| 507 | + { 'type': '/paragraph' }, |
| 508 | + { 'type': 'list' }, |
| 509 | + { 'type': 'listItem', 'attributes': { 'styles': ['bullet'] } }, |
| 510 | + { 'type': 'paragraph' }, |
| 511 | + 'e', |
| 512 | + { 'type': '/paragraph' }, |
| 513 | + { 'type': '/listItem' }, |
| 514 | + { 'type': 'listItem', 'attributes': { 'styles': ['bullet', 'bullet'] } }, |
| 515 | + { 'type': 'paragraph' }, |
| 516 | + 'f', |
| 517 | + { 'type': '/paragraph' }, |
| 518 | + { 'type': '/listItem' }, |
| 519 | + { 'type': 'listItem', 'attributes': { 'styles': ['number'] } }, |
| 520 | + { 'type': 'paragraph' }, |
| 521 | + 'g', |
| 522 | + { 'type': '/paragraph' }, |
| 523 | + { 'type': '/listItem' }, |
| 524 | + { 'type': '/list' }, |
| 525 | + { 'type': '/listItem' }, |
| 526 | + { 'type': '/list' }, |
| 527 | + { 'type': 'paragraph' } |
| 528 | + ], |
| 529 | + 'replacing a table with the list reverses the order of the closing tags correctly' |
| 530 | + ); |
| 531 | + |
| 532 | + // Test 39 |
| 533 | + ve.dm.TransactionProcessor.rollback( documentModel, replaceTable ); |
| 534 | + deepEqual( |
| 535 | + documentModel.getData( new ve.Range( 5, 32 ) ), |
| 536 | + [ |
| 537 | + { 'type': 'table' }, |
| 538 | + { 'type': 'tableRow' }, |
| 539 | + { 'type': 'tableCell' }, |
| 540 | + { 'type': 'paragraph' }, |
| 541 | + 'd', |
| 542 | + { 'type': '/paragraph' }, |
| 543 | + { 'type': 'list' }, |
| 544 | + { 'type': 'listItem', 'attributes': { 'styles': ['bullet'] } }, |
| 545 | + { 'type': 'paragraph' }, |
| 546 | + 'e', |
| 547 | + { 'type': '/paragraph' }, |
| 548 | + { 'type': '/listItem' }, |
| 549 | + { 'type': 'listItem', 'attributes': { 'styles': ['bullet', 'bullet'] } }, |
| 550 | + { 'type': 'paragraph' }, |
| 551 | + 'f', |
| 552 | + { 'type': '/paragraph' }, |
| 553 | + { 'type': '/listItem' }, |
| 554 | + { 'type': 'listItem', 'attributes': { 'styles': ['number'] } }, |
| 555 | + { 'type': 'paragraph' }, |
| 556 | + 'g', |
| 557 | + { 'type': '/paragraph' }, |
| 558 | + { 'type': '/listItem' }, |
| 559 | + { 'type': '/list' }, |
| 560 | + { 'type': '/tableCell' }, |
| 561 | + { 'type': '/tableRow' }, |
| 562 | + { 'type': '/table' }, |
| 563 | + { 'type': 'paragraph' } |
| 564 | + ], |
| 565 | + 'rollback puts the table back' |
| 566 | + ); |
| 567 | + |
494 | 568 | } ); |