Files
yjs/tests/y-xml.tests.js

75 lines
2.7 KiB
JavaScript
Raw Normal View History

2019-03-12 01:42:51 +01:00
import { init, compare } from './testHelper.js'
2019-03-01 23:26:40 +01:00
import * as Y from '../src/index.js'
2019-03-12 01:42:51 +01:00
import * as t from 'lib0/testing.js'
2017-08-24 14:44:23 +02:00
/**
* @param {t.TestCase} tc
*/
2019-03-12 01:42:51 +01:00
export const testSetProperty = tc => {
const { testConnector, users, xml0, xml1 } = init(tc, { users: 2 })
2018-03-23 01:55:47 +01:00
xml0.setAttribute('height', '10')
t.assert(xml0.getAttribute('height') === '10', 'Simple set+get works')
testConnector.flushAllMessages()
2018-03-23 01:55:47 +01:00
t.assert(xml1.getAttribute('height') === '10', 'Simple set+get works (remote)')
2019-03-12 01:42:51 +01:00
compare(users)
}
2017-08-24 14:44:23 +02:00
/**
* @param {t.TestCase} tc
*/
2019-03-12 01:42:51 +01:00
export const testEvents = tc => {
const { testConnector, users, xml0, xml1 } = init(tc, { users: 2 })
2019-04-03 13:23:27 +02:00
/**
* @type {any}
*/
let event
/**
* @type {any}
*/
let remoteEvent
2018-11-25 03:17:00 +01:00
xml0.observe(e => {
2017-08-24 14:44:23 +02:00
event = e
})
2018-11-25 03:17:00 +01:00
xml1.observe(e => {
2017-08-24 14:44:23 +02:00
remoteEvent = e
})
xml0.setAttribute('key', 'value')
2018-03-23 01:55:47 +01:00
t.assert(event.attributesChanged.has('key'), 'YXmlEvent.attributesChanged on updated key')
testConnector.flushAllMessages()
2018-03-29 11:58:02 +02:00
t.assert(remoteEvent.attributesChanged.has('key'), 'YXmlEvent.attributesChanged on updated key (remote)')
2017-08-24 14:44:23 +02:00
// check attributeRemoved
xml0.removeAttribute('key')
2018-03-23 01:55:47 +01:00
t.assert(event.attributesChanged.has('key'), 'YXmlEvent.attributesChanged on removed attribute')
testConnector.flushAllMessages()
2018-03-29 11:58:02 +02:00
t.assert(remoteEvent.attributesChanged.has('key'), 'YXmlEvent.attributesChanged on removed attribute (remote)')
xml0.insert(0, [new Y.XmlText('some text')])
2018-03-23 01:55:47 +01:00
t.assert(event.childListChanged, 'YXmlEvent.childListChanged on inserted element')
testConnector.flushAllMessages()
2018-03-29 11:58:02 +02:00
t.assert(remoteEvent.childListChanged, 'YXmlEvent.childListChanged on inserted element (remote)')
2017-08-24 14:44:23 +02:00
// test childRemoved
xml0.delete(0)
2018-03-23 01:55:47 +01:00
t.assert(event.childListChanged, 'YXmlEvent.childListChanged on deleted element')
testConnector.flushAllMessages()
2018-03-29 11:58:02 +02:00
t.assert(remoteEvent.childListChanged, 'YXmlEvent.childListChanged on deleted element (remote)')
2019-03-12 01:42:51 +01:00
compare(users)
}
2017-08-24 14:44:23 +02:00
/**
* @param {t.TestCase} tc
*/
2019-03-12 01:42:51 +01:00
export const testTreewalker = tc => {
const { users, xml0 } = init(tc, { users: 3 })
2017-11-08 13:40:36 -08:00
let paragraph1 = new Y.XmlElement('p')
let paragraph2 = new Y.XmlElement('p')
2018-03-23 01:55:47 +01:00
let text1 = new Y.XmlText('init')
let text2 = new Y.XmlText('text')
2017-11-08 13:40:36 -08:00
paragraph1.insert(0, [text1, text2])
xml0.insert(0, [paragraph1, paragraph2, new Y.XmlElement('img')])
let allParagraphs = xml0.querySelectorAll('p')
t.assert(allParagraphs.length === 2, 'found exactly two paragraphs')
t.assert(allParagraphs[0] === paragraph1, 'querySelectorAll found paragraph1')
t.assert(allParagraphs[1] === paragraph2, 'querySelectorAll found paragraph2')
t.assert(xml0.querySelector('p') === paragraph1, 'querySelector found paragraph1')
2019-03-12 01:42:51 +01:00
compare(users)
}