2012-07-19 00:11:26 +00:00
|
|
|
/**
|
|
|
|
* VisualEditor BranchNode 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
|
|
|
|
*/
|
|
|
|
|
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.BranchNode' );
|
2011-11-02 21:20:55 +00:00
|
|
|
|
2011-11-04 18:08:51 +00:00
|
|
|
/* Stubs */
|
|
|
|
|
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
|
|
|
ve.BranchNodeStub = function ( children ) {
|
2011-11-03 21:48:40 +00:00
|
|
|
// Inheritance
|
2012-06-20 01:36:34 +00:00
|
|
|
ve.BranchNode.call( this, children );
|
2011-11-02 21:20:55 +00:00
|
|
|
};
|
|
|
|
|
2012-06-20 01:36:34 +00:00
|
|
|
ve.extendClass( ve.BranchNodeStub, ve.BranchNode );
|
2011-11-03 21:48:40 +00:00
|
|
|
|
2011-11-04 18:08:51 +00:00
|
|
|
/* Tests */
|
2011-11-02 21:20:55 +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.test( 'getChildren', 2, function ( assert ) {
|
2012-06-20 01:36:34 +00:00
|
|
|
var node1 = new ve.BranchNodeStub(),
|
|
|
|
node2 = new ve.BranchNodeStub( [node1] );
|
2012-07-10 19:46:08 +00:00
|
|
|
assert.deepEqual( node1.getChildren(), [] );
|
|
|
|
assert.deepEqual( node2.getChildren(), [node1] );
|
2011-11-04 18:08:51 +00:00
|
|
|
} );
|
2011-11-02 21:20:55 +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.test( 'indexOf', 4, function ( assert ) {
|
2012-06-20 01:36:34 +00:00
|
|
|
var node1 = new ve.BranchNodeStub(),
|
|
|
|
node2 = new ve.BranchNodeStub(),
|
|
|
|
node3 = new ve.BranchNodeStub(),
|
|
|
|
node4 = new ve.BranchNodeStub( [node1, node2, node3] );
|
2012-07-10 19:46:08 +00:00
|
|
|
assert.strictEqual( node4.indexOf( null ), -1 );
|
|
|
|
assert.strictEqual( node4.indexOf( node1 ), 0 );
|
|
|
|
assert.strictEqual( node4.indexOf( node2 ), 1 );
|
|
|
|
assert.strictEqual( node4.indexOf( node3 ), 2 );
|
2011-11-02 21:20:55 +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.test( 'traverseLeafNodes', 1, function ( assert ) {
|
2012-06-20 01:36:34 +00:00
|
|
|
var fragment = new ve.dm.Document( ve.dm.example.data ),
|
|
|
|
docNode = fragment.getDocumentNode(),
|
2012-07-10 19:46:08 +00:00
|
|
|
children = docNode.getChildren(),
|
|
|
|
tests = [
|
2011-11-15 14:35:03 +00:00
|
|
|
// Test 1 & 2
|
|
|
|
{
|
2012-06-20 01:36:34 +00:00
|
|
|
'node': docNode,
|
|
|
|
'output': [
|
|
|
|
children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[2].children[0].children[0].children[0],
|
|
|
|
children[2].children[0],
|
|
|
|
children[2].children[1],
|
|
|
|
children[2].children[2],
|
|
|
|
children[3].children[0].children[0].children[0],
|
|
|
|
children[3].children[1].children[0].children[0],
|
|
|
|
children[4].children[0],
|
|
|
|
children[5].children[0]
|
2011-11-15 14:35:03 +00:00
|
|
|
],
|
|
|
|
'reverse': true,
|
|
|
|
'desc': 'Traversing the entire document returns all leaf nodes'
|
|
|
|
},
|
|
|
|
// Test 3 & 4
|
|
|
|
{
|
2012-06-20 01:36:34 +00:00
|
|
|
'node': docNode,
|
2011-11-15 14:35:03 +00:00
|
|
|
'output': [
|
2012-06-20 01:36:34 +00:00
|
|
|
children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0]
|
2011-11-15 14:35:03 +00:00
|
|
|
],
|
|
|
|
'reverse': [
|
2012-06-20 01:36:34 +00:00
|
|
|
children[5].children[0],
|
|
|
|
children[4].children[0],
|
|
|
|
children[3].children[1].children[0].children[0],
|
|
|
|
children[3].children[0].children[0].children[0],
|
|
|
|
children[2].children[2],
|
|
|
|
children[2].children[1],
|
|
|
|
children[2].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[2].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0]
|
2011-11-15 14:35: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
|
|
|
'callback': function ( node ) {
|
2012-06-20 01:36:34 +00:00
|
|
|
if ( node === children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0] ) {
|
2011-11-15 14:35:03 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'desc': 'Returning false from the callback stops the traversal'
|
|
|
|
},
|
|
|
|
// Test 5 & 6
|
|
|
|
{
|
2012-06-20 01:36:34 +00:00
|
|
|
'node': docNode,
|
2011-11-15 14:35:03 +00:00
|
|
|
'output': [
|
2012-06-20 01:36:34 +00:00
|
|
|
children[2].children[0],
|
|
|
|
children[2].children[1],
|
|
|
|
children[2].children[2],
|
|
|
|
children[3].children[0].children[0].children[0],
|
|
|
|
children[3].children[1].children[0].children[0],
|
|
|
|
children[4].children[0],
|
|
|
|
children[5].children[0]
|
2011-11-15 14:35:03 +00:00
|
|
|
],
|
|
|
|
'reverse': [
|
2012-06-20 01:36:34 +00:00
|
|
|
children[2].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[2].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[0].children[0],
|
|
|
|
children[0].children[0]
|
|
|
|
],
|
|
|
|
'from': children[2].children[0],
|
2011-11-15 14:35:03 +00:00
|
|
|
'desc': 'Starting at a leaf node returns that leaf node and everything after it',
|
|
|
|
'reverseDesc': 'Starting at a leaf node returns that leaf node and everything before it (in reverse)'
|
|
|
|
},
|
|
|
|
// Test 7 & 8
|
|
|
|
{
|
2012-06-20 01:36:34 +00:00
|
|
|
'node': docNode,
|
2011-11-15 14:35:03 +00:00
|
|
|
'output': [
|
2012-06-20 01:36:34 +00:00
|
|
|
children[1].children[0].children[0].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[2].children[0].children[0].children[0],
|
|
|
|
children[2].children[0],
|
|
|
|
children[2].children[1],
|
|
|
|
children[2].children[2],
|
|
|
|
children[3].children[0].children[0].children[0],
|
|
|
|
children[3].children[1].children[0].children[0],
|
|
|
|
children[4].children[0],
|
|
|
|
children[5].children[0]
|
2011-11-15 14:35:03 +00:00
|
|
|
],
|
|
|
|
'reverse': [
|
2012-06-20 01:36:34 +00:00
|
|
|
children[0].children[0]
|
2011-11-15 14:35:03 +00:00
|
|
|
],
|
2012-06-20 01:36:34 +00:00
|
|
|
'from': children[1],
|
2011-11-15 14:35:03 +00:00
|
|
|
'desc': 'Starting at a non-leaf node returns all leaf nodes inside and after it',
|
|
|
|
'reverseDesc': 'Starting at a non-leaf node returns all leaf nodes before it and none inside (in reverse)'
|
|
|
|
},
|
|
|
|
// Test 9 & 10
|
|
|
|
{
|
2012-06-20 01:36:34 +00:00
|
|
|
'node': children[1],
|
2011-11-15 14:35:03 +00:00
|
|
|
'output': [
|
2012-06-20 01:36:34 +00:00
|
|
|
children[1].children[0].children[0].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[1].children[0].children[1].children[0].children[0].children[0],
|
|
|
|
children[1].children[0].children[0].children[0].children[2].children[0].children[0].children[0]
|
2011-11-15 14:35:03 +00:00
|
|
|
],
|
|
|
|
'reverse': true,
|
|
|
|
'desc': 'Calling traverseLeafNodes() on a non-root node only returns leaf nodes inside that node'
|
|
|
|
},
|
|
|
|
// Test 11
|
|
|
|
{
|
2012-06-20 01:36:34 +00:00
|
|
|
'node': children[1],
|
|
|
|
'from': children[2],
|
2011-11-15 14:35:03 +00:00
|
|
|
'exception': /^from parameter passed to traverseLeafNodes\(\) must be a descendant$/,
|
|
|
|
'desc': 'Passing a sibling for from results in an exception'
|
|
|
|
}
|
2011-11-15 13:50:24 +00:00
|
|
|
];
|
2012-07-19 03:40:49 +00:00
|
|
|
|
|
|
|
function executeTest( test ) {
|
2012-07-20 00:24:54 +00:00
|
|
|
var realLeaves = [],
|
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
|
|
|
callback = function ( node ) {
|
2012-07-19 03:40:49 +00:00
|
|
|
var retval;
|
|
|
|
realLeaves.push( node );
|
|
|
|
if ( test.callback ) {
|
|
|
|
retval = test.callback( node );
|
|
|
|
if ( retval !== undefined ) {
|
|
|
|
return retval;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
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
|
|
|
f = function () {
|
2012-07-19 03:40:49 +00:00
|
|
|
test.node.traverseLeafNodes( callback, test.from, test.isReversed );
|
|
|
|
};
|
|
|
|
if ( test.exception ) {
|
2012-07-10 19:46:08 +00:00
|
|
|
assert.throws( f, test.exception, test.desc );
|
2012-07-19 03:40:49 +00:00
|
|
|
} else {
|
|
|
|
f();
|
2012-07-10 19:46:08 +00:00
|
|
|
assert.ok( ve.compareArrays( realLeaves, test.output ), test.desc );
|
2012-07-19 03:40:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var count = 0;
|
|
|
|
for ( var t = 0; t < tests.length; t++ ) {
|
|
|
|
if ( tests[t].hasOwnProperty( 'reverse' ) ) {
|
2012-06-20 01:36:34 +00:00
|
|
|
count++;
|
|
|
|
}
|
|
|
|
count++;
|
|
|
|
}
|
|
|
|
|
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.expect( count );
|
2011-11-15 14:35:03 +00:00
|
|
|
for ( var i = 0; i < tests.length; i++ ) {
|
|
|
|
executeTest( tests[i] );
|
|
|
|
if ( tests[i].reverse !== undefined ) {
|
|
|
|
var reversed = {
|
|
|
|
'node': tests[i].node,
|
|
|
|
'from': tests[i].from,
|
|
|
|
'callback': tests[i].callback,
|
|
|
|
'exception': tests[i].exception,
|
|
|
|
'isReversed': true,
|
|
|
|
'desc': tests[i].reverseDesc || tests[i].desc + ' (in reverse)'
|
|
|
|
};
|
|
|
|
if ( tests[i].output !== undefined && tests[i].reverse === true ) {
|
|
|
|
reversed.output = tests[i].output.reverse();
|
|
|
|
} else {
|
|
|
|
reversed.output = tests[i].reverse;
|
|
|
|
}
|
|
|
|
executeTest( reversed );
|
|
|
|
}
|
|
|
|
}
|
2012-07-19 03:40:49 +00:00
|
|
|
} );
|