2012-07-19 00:11:26 +00:00
|
|
|
/**
|
|
|
|
* VisualEditor content editable TextNode tests.
|
2012-07-19 21:25:16 +00:00
|
|
|
*
|
2012-07-19 00:11:26 +00:00
|
|
|
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
|
|
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
|
|
*/
|
2012-05-03 02:29:03 +00:00
|
|
|
|
Kranitor #1: On-boarding
'''Kranitor commits''' are commits by Krinkle with his janitor hat on.
Must never contain functional changes mixed with miscellaneous changes.
.gitignore:
* Add .DS_Store to the ignore list so that browsing the directories
on Mac OS X, will not add these files to the list of untracked
files.
* Fix missing newline at end of file
.jshintrc
* raises -> throws
* +module (QUnit.module)
* remove 'Node' (as of node-jshint 1.7.2 this is now part of
'browser:true', as it should be)
Authors:
* Adding myself
MWExtension/VisualEditor.php
* Fix default value of wgVisualEditorParsoidURL to not
point to the experimental instance in WMF Labs.
Issues:
* ve.ce.TextNode:
- Fix TODO: Don't perform a useless clone of an already-jQuerified object.
- Use .html() to set html content instead of encapsulating between
two strings. This is slightly faster but more importantly safer,
and prevents situations where the resulting jQuery collection
actually contains 2 elements instead of 1, thus messing up
what .contents() is iterating over.
* ve.ce.Document.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.Document.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.Transaction.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.TransactionProcessor.test.js
- Fix: ReferenceError: assert is not defined
* ext.visualEditor.viewPageTarget
- Missing dependency on 'mediawiki.Title'
Code conventions / Misc cleanup
* Various JSHint warnings.
* Whitespace
* jQuery(): Use '<tag>' for element creation,
use '<valid><xml/></valid>' for parsing
* Use the default operator instead of ternary when the condition and
first value are the same.
x = foo ? foo : bar; -> x = foo || bar;
Because contrary to some programming language (PHP...), in JS the
default operator does not enforce a boolean result but returns the
original value, hence it being called the 'default' operator, as
opposed to the 'or' operator.
* No need to call addClass() twice, it takes a space-separated list
(jQuery splits by space and adds if needed)
* Use .on( event[, selector], fn ) instead of the deprecated
routers to it such as .bind(), .delegate() and .live().
All these three are now built-in and fully compatible with .on()
* Add 'XXX:' comments for suspicious code that I don't want to change
as part of a clean up commit.
* Remove unused variables (several var x = this; where x was not
used anywhere, possibly from boilerplate copy/paste)
* Follows-up Trevor's commit that converts test suites to the new
QUnit format. Also removed the globals since we no longer use those
any more.
Change-Id: I7e37c9bff812e371c7f65a6fd85d9e2af3e0a22f
2012-07-27 08:43:33 +00:00
|
|
|
QUnit.module( 've.ce.TextNode' );
|
2012-05-03 02:29:03 +00:00
|
|
|
|
|
|
|
/* Tests */
|
|
|
|
|
2012-10-12 18:04:15 +00:00
|
|
|
QUnit.test( 'getHtml', 22, function ( assert ) {
|
Kranitor #1: On-boarding
'''Kranitor commits''' are commits by Krinkle with his janitor hat on.
Must never contain functional changes mixed with miscellaneous changes.
.gitignore:
* Add .DS_Store to the ignore list so that browsing the directories
on Mac OS X, will not add these files to the list of untracked
files.
* Fix missing newline at end of file
.jshintrc
* raises -> throws
* +module (QUnit.module)
* remove 'Node' (as of node-jshint 1.7.2 this is now part of
'browser:true', as it should be)
Authors:
* Adding myself
MWExtension/VisualEditor.php
* Fix default value of wgVisualEditorParsoidURL to not
point to the experimental instance in WMF Labs.
Issues:
* ve.ce.TextNode:
- Fix TODO: Don't perform a useless clone of an already-jQuerified object.
- Use .html() to set html content instead of encapsulating between
two strings. This is slightly faster but more importantly safer,
and prevents situations where the resulting jQuery collection
actually contains 2 elements instead of 1, thus messing up
what .contents() is iterating over.
* ve.ce.Document.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.Document.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.Transaction.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.TransactionProcessor.test.js
- Fix: ReferenceError: assert is not defined
* ext.visualEditor.viewPageTarget
- Missing dependency on 'mediawiki.Title'
Code conventions / Misc cleanup
* Various JSHint warnings.
* Whitespace
* jQuery(): Use '<tag>' for element creation,
use '<valid><xml/></valid>' for parsing
* Use the default operator instead of ternary when the condition and
first value are the same.
x = foo ? foo : bar; -> x = foo || bar;
Because contrary to some programming language (PHP...), in JS the
default operator does not enforce a boolean result but returns the
original value, hence it being called the 'default' operator, as
opposed to the 'or' operator.
* No need to call addClass() twice, it takes a space-separated list
(jQuery splits by space and adds if needed)
* Use .on( event[, selector], fn ) instead of the deprecated
routers to it such as .bind(), .delegate() and .live().
All these three are now built-in and fully compatible with .on()
* Add 'XXX:' comments for suspicious code that I don't want to change
as part of a clean up commit.
* Remove unused variables (several var x = this; where x was not
used anywhere, possibly from boilerplate copy/paste)
* Follows-up Trevor's commit that converts test suites to the new
QUnit format. Also removed the globals since we no longer use those
any more.
Change-Id: I7e37c9bff812e371c7f65a6fd85d9e2af3e0a22f
2012-07-27 08:43:33 +00:00
|
|
|
var i, len, cases;
|
|
|
|
|
|
|
|
cases = [
|
2012-05-03 02:29:03 +00:00
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
|
|
|
'a',
|
|
|
|
'b',
|
|
|
|
'c',
|
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': 'abc'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
2012-08-24 02:06:36 +00:00
|
|
|
['a', [ { 'type': 'textStyle/bold' } ]],
|
|
|
|
['b', [ { 'type': 'textStyle/bold' } ]],
|
|
|
|
['c', [ { 'type': 'textStyle/bold' } ]],
|
2012-05-03 02:29:03 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': '<b>abc</b>'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
2012-08-24 02:06:36 +00:00
|
|
|
['a', [ { 'type': 'textStyle/bold' } ]],
|
2012-05-03 02:29:03 +00:00
|
|
|
'b',
|
2012-08-24 02:06:36 +00:00
|
|
|
['c', [ { 'type': 'textStyle/italic' } ]],
|
2012-05-03 02:29:03 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': '<b>a</b>b<i>c</i>'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
2012-08-24 02:06:36 +00:00
|
|
|
['a', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['b', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['c', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
2012-05-03 02:29:03 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': '<b><i><u>abc</u></i></b>'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
2012-08-24 02:06:36 +00:00
|
|
|
['a', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['b', [
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' }
|
|
|
|
]],
|
|
|
|
['c', [
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' }
|
|
|
|
]],
|
2012-05-03 02:29:03 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': '<b><i><u>abc</u></i></b>'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
2012-08-24 02:06:36 +00:00
|
|
|
['a', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
2012-05-03 02:29:03 +00:00
|
|
|
'b',
|
2012-08-24 02:06:36 +00:00
|
|
|
['c', [
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' }
|
|
|
|
]],
|
2012-05-03 02:29:03 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': '<b><i><u>a</u></i></b>b<u><b><i>c</i></b></u>'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
|
|
|
'a',
|
|
|
|
'b',
|
|
|
|
'c',
|
2012-08-24 02:06:36 +00:00
|
|
|
['d', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['e', [
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' }
|
|
|
|
]],
|
|
|
|
['f', [
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' }
|
|
|
|
]],
|
2012-05-03 02:29:03 +00:00
|
|
|
'g',
|
|
|
|
'h',
|
2012-07-19 03:40:49 +00:00
|
|
|
'i',
|
2012-05-03 02:29:03 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': 'abc<b><i><u>def</u></i></b>ghi'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
|
|
|
'a',
|
|
|
|
'b',
|
|
|
|
'c',
|
2012-08-24 02:06:36 +00:00
|
|
|
['d', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['e', [
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['f', [
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' }
|
|
|
|
]],
|
2012-05-03 02:29:03 +00:00
|
|
|
'g',
|
|
|
|
'h',
|
2012-07-19 03:40:49 +00:00
|
|
|
'i',
|
2012-05-03 02:29:03 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': 'abc<b><i><u>d</u></i></b><i><u>e<b>f</b></u></i>ghi'
|
|
|
|
},
|
2012-05-03 05:28:57 +00:00
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
|
|
|
'a',
|
|
|
|
'b',
|
|
|
|
'c',
|
2012-08-24 02:06:36 +00:00
|
|
|
['d', [
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' }
|
|
|
|
]],
|
|
|
|
['e', [
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['f', [
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/italic' }
|
|
|
|
]],
|
2012-05-03 05:28:57 +00:00
|
|
|
'g',
|
|
|
|
'h',
|
2012-07-19 03:40:49 +00:00
|
|
|
'i',
|
2012-05-03 05:28:57 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': 'abc<i><u><b>d</b>e<b>f</b></u></i>ghi'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'data': [
|
|
|
|
{ 'type': 'paragraph' },
|
|
|
|
'a',
|
|
|
|
'b',
|
|
|
|
'c',
|
2012-08-24 02:06:36 +00:00
|
|
|
['d', [
|
|
|
|
{ 'type': 'textStyle/italic' },
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' }
|
|
|
|
]],
|
|
|
|
['e', [
|
|
|
|
{ 'type': 'textStyle/bold' },
|
|
|
|
{ 'type': 'textStyle/underline' }
|
|
|
|
]],
|
|
|
|
['f', [
|
|
|
|
{ 'type': 'textStyle/underline' },
|
|
|
|
{ 'type': 'textStyle/bold' }
|
|
|
|
]],
|
2012-05-03 05:28:57 +00:00
|
|
|
'g',
|
|
|
|
'h',
|
2012-07-19 03:40:49 +00:00
|
|
|
'i',
|
2012-05-03 05:28:57 +00:00
|
|
|
{ 'type': '/paragraph' }
|
|
|
|
],
|
|
|
|
'html': 'abc<i><u><b>d</b></u></i><u><b>ef</b></u>ghi'
|
2012-06-20 22:31:50 +00:00
|
|
|
},
|
2012-10-12 18:04:15 +00:00
|
|
|
{
|
|
|
|
// [ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },{ 'type': '/paragraph' }],
|
|
|
|
'html': ''
|
|
|
|
},
|
2012-06-20 22:31:50 +00:00
|
|
|
{
|
|
|
|
// [ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', ' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][ ][ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', ' ', ' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][ ][ ][ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', ' ', ' ', ' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][A][ ][ ][ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', 'A', ' ', ' ', ' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' A '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][A][ ][ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', 'A', ' ', ' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' A '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][ ][A][ ][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', ' ', 'A', ' ', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' A '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][ ][ ][A][ ]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', ' ', ' ', 'A', ' ',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' A '
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// [ ][ ][ ][ ][ ][A]
|
|
|
|
'data': [{ 'type': 'paragraph' },' ', ' ', ' ', ' ', ' ', 'A',{ 'type': '/paragraph' }],
|
|
|
|
'html': ' A'
|
2012-05-07 18:58:02 +00:00
|
|
|
}
|
2012-05-03 02:29:03 +00:00
|
|
|
];
|
Kranitor #1: On-boarding
'''Kranitor commits''' are commits by Krinkle with his janitor hat on.
Must never contain functional changes mixed with miscellaneous changes.
.gitignore:
* Add .DS_Store to the ignore list so that browsing the directories
on Mac OS X, will not add these files to the list of untracked
files.
* Fix missing newline at end of file
.jshintrc
* raises -> throws
* +module (QUnit.module)
* remove 'Node' (as of node-jshint 1.7.2 this is now part of
'browser:true', as it should be)
Authors:
* Adding myself
MWExtension/VisualEditor.php
* Fix default value of wgVisualEditorParsoidURL to not
point to the experimental instance in WMF Labs.
Issues:
* ve.ce.TextNode:
- Fix TODO: Don't perform a useless clone of an already-jQuerified object.
- Use .html() to set html content instead of encapsulating between
two strings. This is slightly faster but more importantly safer,
and prevents situations where the resulting jQuery collection
actually contains 2 elements instead of 1, thus messing up
what .contents() is iterating over.
* ve.ce.Document.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.Document.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.Transaction.test.js
- Fix: ReferenceError: assert is not defined
* ve.dm.TransactionProcessor.test.js
- Fix: ReferenceError: assert is not defined
* ext.visualEditor.viewPageTarget
- Missing dependency on 'mediawiki.Title'
Code conventions / Misc cleanup
* Various JSHint warnings.
* Whitespace
* jQuery(): Use '<tag>' for element creation,
use '<valid><xml/></valid>' for parsing
* Use the default operator instead of ternary when the condition and
first value are the same.
x = foo ? foo : bar; -> x = foo || bar;
Because contrary to some programming language (PHP...), in JS the
default operator does not enforce a boolean result but returns the
original value, hence it being called the 'default' operator, as
opposed to the 'or' operator.
* No need to call addClass() twice, it takes a space-separated list
(jQuery splits by space and adds if needed)
* Use .on( event[, selector], fn ) instead of the deprecated
routers to it such as .bind(), .delegate() and .live().
All these three are now built-in and fully compatible with .on()
* Add 'XXX:' comments for suspicious code that I don't want to change
as part of a clean up commit.
* Remove unused variables (several var x = this; where x was not
used anywhere, possibly from boilerplate copy/paste)
* Follows-up Trevor's commit that converts test suites to the new
QUnit format. Also removed the globals since we no longer use those
any more.
Change-Id: I7e37c9bff812e371c7f65a6fd85d9e2af3e0a22f
2012-07-27 08:43:33 +00:00
|
|
|
for ( i = 0, len = cases.length; i < len; i++ ) {
|
2012-08-24 02:06:36 +00:00
|
|
|
ve.dm.example.preprocessAnnotations( cases[i].data );
|
2012-07-10 19:46:08 +00:00
|
|
|
assert.equal(
|
2012-05-07 18:58:02 +00:00
|
|
|
( new ve.ce.TextNode(
|
|
|
|
( new ve.dm.Document( cases[i].data ) )
|
|
|
|
.documentNode.getChildren()[0].getChildren()[0] )
|
|
|
|
).getHtml(),
|
|
|
|
cases[i].html
|
|
|
|
);
|
2012-05-03 02:29:03 +00:00
|
|
|
}
|
2012-05-07 18:58:02 +00:00
|
|
|
} );
|