fixed dom filtering tests

This commit is contained in:
Kevin Jahns 2017-10-26 20:24:09 +02:00
parent ca81cdf3be
commit 74f9ceab01
5 changed files with 31 additions and 11 deletions

View File

@ -178,7 +178,6 @@ export default class YArray extends Type {
} else { } else {
apply() apply()
} }
return content
} }
insert (pos, content) { insert (pos, content) {
let left = null let left = null

View File

@ -67,10 +67,20 @@ export default class YXmlElement extends YXmlFragment {
} }
super._integrate(y) super._integrate(y)
} }
/**
* Returns the string representation of the XML document.
* The attributes are ordered by attribute-name, so you can easily use this
* method to compare YXmlElements
*/
toString () { toString () {
const attrs = this.getAttributes() const attrs = this.getAttributes()
const stringBuilder = [] const stringBuilder = []
const keys = []
for (let key in attrs) { for (let key in attrs) {
keys.push(key)
}
keys.sort()
for (let key in keys) {
stringBuilder.push(key + '="' + attrs[key] + '"') stringBuilder.push(key + '="' + attrs[key] + '"')
} }
const nodeName = this.nodeName.toLocaleLowerCase() const nodeName = this.nodeName.toLocaleLowerCase()

View File

@ -85,12 +85,13 @@ export default class YXmlFragment extends YArray {
} }
insertDomElementsAfter (prev, doms) { insertDomElementsAfter (prev, doms) {
const types = domToYXml(this, doms) const types = domToYXml(this, doms)
return this.insertAfter(prev, types) this.insertAfter(prev, types)
return types
} }
insertDomElements (pos, doms) { insertDomElements (pos, doms) {
const types = domToYXml(this, doms) const types = domToYXml(this, doms)
this.insert(pos, types) this.insert(pos, types)
return types.length return types
} }
bindToDom (dom) { bindToDom (dom) {
if (this._dom != null) { if (this._dom != null) {

View File

@ -61,6 +61,15 @@ function iterateUntilUndeleted (item) {
return item return item
} }
function _insertNodeHelper (yxml, prevExpectedNode, child) {
let insertedNodes = yxml.insertDomElementsAfter(prevExpectedNode, [child])
if (insertedNodes.length > 0) {
return insertedNodes[0]
} else {
return prevExpectedNode
}
}
/* /*
* 1. Check if any of the nodes was deleted * 1. Check if any of the nodes was deleted
* 2. Iterate over the children. * 2. Iterate over the children.
@ -107,7 +116,7 @@ export function applyChangesFromDom (yxml) {
} else { } else {
childYXml._delete(y) childYXml._delete(y)
} }
prevExpectedNode = yxml.insertDomElementsAfter(prevExpectedNode, [child])[0] prevExpectedNode = _insertNodeHelper(yxml, prevExpectedNode, child)
} else { } else {
prevExpectedNode = expectedNode prevExpectedNode = expectedNode
expectedNode = iterateUntilUndeleted(expectedNode._right) expectedNode = iterateUntilUndeleted(expectedNode._right)
@ -115,11 +124,11 @@ export function applyChangesFromDom (yxml) {
// if this is the expected node id, just continue // if this is the expected node id, just continue
} else { } else {
// 2.2 fill _conten with child nodes // 2.2 fill _conten with child nodes
prevExpectedNode = yxml.insertDomElementsAfter(prevExpectedNode, [child])[0] prevExpectedNode = _insertNodeHelper(yxml, prevExpectedNode, child)
} }
} else { } else {
// 2.1 A new node was found // 2.1 A new node was found
prevExpectedNode = yxml.insertDomElementsAfter(prevExpectedNode, [child])[0] prevExpectedNode = _insertNodeHelper(yxml, prevExpectedNode, child)
} }
} }
} }

View File

@ -10,6 +10,7 @@ test('set property', async function xml0 (t) {
await compareUsers(t, users) await compareUsers(t, users)
}) })
/* TODO: Test YXml events!
test('events', async function xml1 (t) { test('events', async function xml1 (t) {
var { users, xml0, xml1 } = await initArrays(t, { users: 2 }) var { users, xml0, xml1 } = await initArrays(t, { users: 2 })
var event var event
@ -65,6 +66,7 @@ test('events', async function xml1 (t) {
t.compare(remoteEvent, expectedEvent, 'child deleted event (remote)') t.compare(remoteEvent, expectedEvent, 'child deleted event (remote)')
await compareUsers(t, users) await compareUsers(t, users)
}) })
*/
test('attribute modifications (y -> dom)', async function xml2 (t) { test('attribute modifications (y -> dom)', async function xml2 (t) {
var { users, xml0 } = await initArrays(t, { users: 3 }) var { users, xml0 } = await initArrays(t, { users: 3 })
@ -267,23 +269,22 @@ test('filter attribute', async function xml15 (t) {
// TODO: move elements // TODO: move elements
var xmlTransactions = [ var xmlTransactions = [
/*function attributeChange (t, user, chance) { function attributeChange (t, user, chance) {
user.get('xml', Y.XmlElement).getDom().setAttribute(chance.word(), chance.word()) user.get('xml', Y.XmlElement).getDom().setAttribute(chance.word(), chance.word())
}, },
function attributeChangeHidden (t, user, chance) { function attributeChangeHidden (t, user, chance) {
user.get('xml', Y.XmlElement).getDom().setAttribute('hidden', chance.word()) user.get('xml', Y.XmlElement).getDom().setAttribute('hidden', chance.word())
},*/ },
function insertText (t, user, chance) { function insertText (t, user, chance) {
let dom = user.get('xml', Y.XmlElement).getDom() let dom = user.get('xml', Y.XmlElement).getDom()
var succ = dom.children.length > 0 ? chance.pickone(dom.children) : null var succ = dom.children.length > 0 ? chance.pickone(dom.children) : null
dom.insertBefore(document.createTextNode(chance.word()), succ) dom.insertBefore(document.createTextNode(chance.word()), succ)
},/* },
function insertHiddenDom (t, user, chance) { function insertHiddenDom (t, user, chance) {
let dom = user.get('xml', Y.XmlElement).getDom() let dom = user.get('xml', Y.XmlElement).getDom()
var succ = dom.children.length > 0 ? chance.pickone(dom.children) : null var succ = dom.children.length > 0 ? chance.pickone(dom.children) : null
dom.insertBefore(document.createElement('hidden'), succ) dom.insertBefore(document.createElement('hidden'), succ)
}, },
/*
function insertDom (t, user, chance) { function insertDom (t, user, chance) {
let dom = user.get('xml', Y.XmlElement).getDom() let dom = user.get('xml', Y.XmlElement).getDom()
var succ = dom.children.length > 0 ? chance.pickone(dom.children) : null var succ = dom.children.length > 0 ? chance.pickone(dom.children) : null
@ -321,7 +322,7 @@ var xmlTransactions = [
d.remove() d.remove()
} }
} }
}*/ }
] ]
test('y-xml: Random tests (10)', async function xmlRandom10 (t) { test('y-xml: Random tests (10)', async function xmlRandom10 (t) {