mediawiki-extensions-Visual.../modules/ve/test/dm/ve.dm.Node.test.js
Timo Tijhof 88f6089952 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 14:40:00 -07:00

118 lines
3.4 KiB
JavaScript

/**
* VisualEditor data model Node tests.
*
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
QUnit.module( 've.dm.Node' );
/* Stubs */
ve.dm.NodeStub = function ( length, attributes ) {
// Inheritance
ve.dm.Node.call( this, 'stub', length, attributes );
};
ve.dm.NodeStub.rules = {
'isWrapped': true,
'isContent': true,
'canContainContent': false,
'childNodeTypes': []
};
ve.dm.NodeStub.converters = null;
ve.extendClass( ve.dm.NodeStub, ve.dm.Node );
ve.dm.nodeFactory.register( 'stub', ve.dm.NodeStub );
/* Tests */
QUnit.test( 'canHaveChildren', 1, function ( assert ) {
var node = new ve.dm.NodeStub();
assert.equal( node.canHaveChildren(), false );
} );
QUnit.test( 'canHaveGrandchildren', 1, function ( assert ) {
var node = new ve.dm.NodeStub();
assert.equal( node.canHaveGrandchildren(), false );
} );
QUnit.test( 'getLength', 2, function ( assert ) {
var node1 = new ve.dm.NodeStub(),
node2 = new ve.dm.NodeStub( 1234 );
assert.strictEqual( node1.getLength(), 0 );
assert.strictEqual( node2.getLength(), 1234 );
} );
QUnit.test( 'getOuterLength', 2, function ( assert ) {
var node1 = new ve.dm.NodeStub(),
node2 = new ve.dm.NodeStub( 1234 );
assert.strictEqual( node1.getOuterLength(), 2 );
assert.strictEqual( node2.getOuterLength(), 1236 );
} );
QUnit.test( 'setLength', 2, function( assert ) {
var node = new ve.dm.NodeStub();
node.setLength( 1234 );
assert.strictEqual( node.getLength(), 1234 );
assert.throws(
function () {
// Length can not be negative
node.setLength( -1 );
},
/^Length cannot be negative$/,
'throws exception if length is negative'
);
} );
QUnit.test( 'adjustLength', 1, function ( assert ) {
var node = new ve.dm.NodeStub( 1234 );
node.adjustLength( 5678 );
assert.strictEqual( node.getLength(), 6912 );
} );
QUnit.test( 'getAttribute', 2, function ( assert ) {
var node = new ve.dm.NodeStub( 0, { 'a': 1, 'b': 2 } );
assert.strictEqual( node.getAttribute( 'a' ), 1 );
assert.strictEqual( node.getAttribute( 'b' ), 2 );
} );
QUnit.test( 'setRoot', 1, function ( assert ) {
var node1 = new ve.dm.NodeStub(),
node2 = new ve.dm.NodeStub();
node1.setRoot( node2 );
assert.strictEqual( node1.getRoot(), node2 );
} );
QUnit.test( 'attach', 2, function ( assert ) {
var node1 = new ve.dm.NodeStub(),
node2 = new ve.dm.NodeStub();
node1.attach( node2 );
assert.strictEqual( node1.getParent(), node2 );
assert.strictEqual( node1.getRoot(), node2 );
} );
QUnit.test( 'detach', 2, function ( assert ) {
var node1 = new ve.dm.NodeStub(),
node2 = new ve.dm.NodeStub();
node1.attach( node2 );
node1.detach();
assert.strictEqual( node1.getParent(), null );
assert.strictEqual( node1.getRoot(), node1 );
} );
QUnit.test( 'canBeMergedWith', 4, function ( assert ) {
var node1 = new ve.dm.LeafNodeStub(),
node2 = new ve.dm.BranchNodeStub( [node1] ),
node3 = new ve.dm.BranchNodeStub( [node2] ),
node4 = new ve.dm.LeafNodeStub(),
node5 = new ve.dm.BranchNodeStub( [node4] );
assert.strictEqual( node3.canBeMergedWith( node5 ), true, 'same level, same type' );
assert.strictEqual( node2.canBeMergedWith( node5 ), false, 'different level, same type' );
assert.strictEqual( node2.canBeMergedWith( node1 ), false, 'different level, different type' );
assert.strictEqual( node2.canBeMergedWith( node4 ), false, 'same level, different type' );
} );