'));
- assert.ok(c.nodeInsideList({node: c.findNodes({klass: 'item'})[1]}), 'item is inside a list');
- assert.ok(c.nodeInsideList({node: c.findNodes({tag: 'span'})[0]}), 'things nested in item are inside a list');
- });
- });
+define([
+'libs/jquery-1.9.1.min',
+'libs/chai',
+'./utils.js',
+'modules/documentCanvas/canvas',
+'modules/documentCanvas/canvasNode'
+], function($, chai, utils, canvas, canvasNode) {
+
+ 'use strict';
+
+ var assert = chai.assert;
+ var assertDomEqual = utils.assertDomEqual;
+
+
+ suite('Quering nodes', function() {
+ test('getting preceding node', function() {
+ var c = canvas.create('
');
+ var secondP = c.findNodes({tag: 'p'})[1];
+ var firstP = c.getPrecedingNode({node: secondP});
+ assert.equal(firstP.getContent(), 'a');
+ });
+
+ test('pervious node of node without "previous siblings" is its parent', function() {
+ var c = canvas.create('
');
+ var paragraph = c.findNodes({tag: 'p'})[0];
+ assert.equal(c.getPrecedingNode({node: paragraph}).getTag(), 'section');
+ });
+
+ });
+
+
+ suite('Inserting nodes', function() {
+ test('append node to root', function() {
+ var c = canvas.create();
+ var node = canvasNode.create({tag: 'header', klass: 'some-class'});
+ c.nodeAppend({node: node, to: 'root'});
+ assertDomEqual(c.getContent(), '
');
+ });
+
+ test('append node to another node', function() {
+ var c = canvas.create('
');
+ var node = canvasNode.create({tag: 'header', klass: 'some-class'});
+ var to = c.findNodes('div')[0];
+ c.nodeAppend({node: node, to: to});
+ assertDomEqual(c.getContent(), '
');
+ });
+
+ test('insert node after another node', function() {
+ var c = canvas.create('
');
+ var node = canvasNode.create({tag: 'header', klass: 'some-class'});
+ var after = c.findNodes('div')[0];
+ c.nodeInsertAfter({node: node, after: after});
+ assertDomEqual(c.getContent(), '
');
+ });
+
+ test('wrap text in node', function() {
+ var c = canvas.create('
');
+ var header = c.findNodes({tag: 'header'})[0];
+ var wrapper = canvasNode.create({tag: 'aside'});
+ c.nodeWrap({inside: header, _with: wrapper, offsetStart: 1, offsetEnd: 6});
+ assertDomEqual(c.getContent(), '
');
+ });
+
+ test('wrap text in node - text not a first node', function() {
+ var c = canvas.create('
Alice has a cat
');
+ var header = c.findNodes({tag: 'header'})[0];
+ var wrapper = canvasNode.create({tag: 'aside'});
+ c.nodeWrap({inside: header, _with: wrapper, offsetStart: 1, offsetEnd: 4, textNodeIdx: 2});
+ assertDomEqual(c.getContent(), '
Alice has a cat
');
+ });
+
+ test('wrap text with nodes inside', function() {
+ var c = canvas.create('
Alice has a small cat
');
+ var header = c.findNodes({tag: 'header'})[0];
+ var wrapper = canvasNode.create({tag: 'aside'});
+ c.nodeWrap({inside: header, _with: wrapper, offsetStart: 6, offsetEnd: 4, textNodeIdx: [0,2]});
+ assertDomEqual(c.getContent(), '
Alice has a small cat
');
+ });
+
+ test('unwrap text', function() {
+ var c = canvas.create('
Alice has a cat
');
+ var span = c.findNodes({tag:'span'})[0];
+ c.nodeUnwrap({node: span});
+ assertDomEqual(c.getContent(), '
Alice has a cat
');
+ });
+
+ test('unwrap text - first text node', function() {
+ var c = canvas.create('
Alice has a cat
');
+ var span = c.findNodes({tag:'span'})[0];
+ c.nodeUnwrap({node: span});
+ assertDomEqual(c.getContent(), '
Alice has a cat
');
+ });
+
+ test('unwrap text - only text node', function() {
+ var c = canvas.create('
Alice
');
+ var span = c.findNodes({tag:'span'})[0];
+ c.nodeUnwrap({node: span});
+ assertDomEqual(c.getContent(), '
Alice
');
+ });
+
+
+ test('unwrap text - non text neighbours', function() {
+ var c = canvas.create('
');
+ var span = c.findNodes({tag:'span'})[0];
+ c.nodeUnwrap({node: span});
+ assertDomEqual(c.getContent(), '
');
+ });
+
+ test('split node', function() {
+ var c = canvas.create('
');
+ var header = c.findNodes({tag: 'header'})[0];
+ var newNode = c.nodeSplit({node: header, offset: 4});
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
'));
+ assert.ok(newNode.isSame(c.findNodes({tag: 'header'})[1]));
+ });
+
+ test('split root node', function() {
+ var c = canvas.create('
cat
');
+ var header = c.findNodes({tag: 'header'})[0];
+ var newNode = c.nodeSplit({node: header, offset: 1});
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
c
\
+
at
'));
+ assert.ok(newNode.isSame(c.findNodes({tag: 'header'})[1]));
+ });
+
+ test('split node with subnodes', function() {
+ var c = canvas.create(utils.cleanUp('\
+
\
+
Fancy and niceheader 1
\
+
'));
+ var header = c.findNodes({tag: 'header'})[0];
+ var newNode = c.nodeSplit({node: header, offset: 5});
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
\
+
Fancy
\
+
and niceheader 1
\
+
'));
+ });
+
+ test('remove node', function() {
+ var c = canvas.create('
some text
');
+ var span = c.findNodes({tag: 'span'})[0];
+ c.nodeRemove({node: span});
+ assertDomEqual(c.getContent(), '
');
+ });
+ });
+
+
+ suite('Lists', function() {
+ test('create from existing nodes', function() {
+ var c = canvas.create(utils.cleanUp('\
+
\
+
alice
\
+ has\
+
a
\
+
cat
\
+
or not
\
+
'
+ ));
+
+ var div_alice = c.findNodes({tag: 'div'})[0];
+ var div_cat = c.findNodes({tag:'div'})[2];
+
+ c.listCreate({start: div_alice, end: div_cat});
+
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
\
+
\
+
alice
\
+
has
\
+
a
\
+
cat
\
+
\
+
or not
\
+
'));
+ });
+
+ test('create from existing nodes - start/end order doesn\'t matter', function() {
+ var html = utils.cleanUp('\
+
alice
\
+
cat
');
+ var expected = utils.cleanUp('\
+
');
+
+ var c = canvas.create(html);
+ var div_alice = c.findNodes({tag: 'div'})[0];
+ var div_cat = c.findNodes({tag:'div'})[1];
+ c.listCreate({start: div_cat, end: div_alice});
+ assertDomEqual(c.getContent(), expected);
+
+ c = canvas.create(html);
+ div_alice = c.findNodes({tag: 'div'})[0];
+ div_cat = c.findNodes({tag:'div'})[1];
+ c.listCreate({start: div_alice, end: div_cat});
+ assertDomEqual(c.getContent(), expected);
+ });
+
+ test('remove', function() {
+ var c = canvas.create(utils.cleanUp('\
+
'));
+ var item = c.findNodes({klass: 'item'})[1];
+ c.listRemove({pointer: item});
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
'));
+ });
+
+ test('checking if node is inside a list', function() {
+ var c = canvas.create(utils.cleanUp('\
+
\
+
'));
+ assert.ok(c.nodeInsideList({node: c.findNodes({klass: 'item'})[1]}), 'item is inside a list');
+ assert.ok(c.nodeInsideList({node: c.findNodes({tag: 'span'})[0]}), 'things nested in item are inside a list');
+ });
+
+ test('moving items to nested list', function() {
+ var listHTML = utils.cleanUp('\
+
\
+
alice
\
+
cat
\
+
dog
\
+
bee
\
+
');
+ var c = canvas.create(listHTML);
+ var items = c.findNodes({klass: 'item'});
+ var cat_item = items[1];
+ var dog_item = items[2];
+
+ c.listCreate({start: cat_item, end: dog_item});
+
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
'
+ ));
+ });
+
+ test('removing nested list', function() {
+ var nestedList = utils.cleanUp('\
+
');
+
+ var c = canvas.create(nestedList);
+ var dog_item = c.findNodes('[wlxml-class=list-items] [wlxml-class=list-items] > div')[1];
+ assert.equal(dog_item.getContent(), 'dog');
+
+ c.listRemove({pointer: dog_item});
+
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
\
+
alice
\
+
cat
\
+
dog
\
+
bee
\
+
'));
+
+
+ });
+
+ test('removing list containing nested list', function() {
+ var nestedList = utils.cleanUp('\
+
');
+
+ var c = canvas.create(nestedList);
+ var alice_item = c.findNodes('[wlxml-class=list-items] > div')[0];
+ assert.equal(alice_item.getContent(), 'alice');
+
+ c.listRemove({pointer: alice_item});
+
+ assertDomEqual(c.getContent(), utils.cleanUp('\
+
\
+
alice
\
+
cat
\
+
dog
\
+
bee
\
+
'));
+
+
+ });
+ });
});
\ No newline at end of file