outsourced all types (except for object type)
This commit is contained in:
@@ -7,7 +7,7 @@ _ = require("underscore")
|
||||
chai.use(sinonChai)
|
||||
|
||||
Connector = require "../../y-test/lib/y-test.coffee"
|
||||
Y = null
|
||||
Y = null # need global reference!
|
||||
|
||||
module.exports = class Test
|
||||
constructor: (@name_suffix = "", Yjs)->
|
||||
@@ -20,7 +20,7 @@ module.exports = class Test
|
||||
@time = 0 # denotes to the time when run was started
|
||||
@ops = 0 # number of operations (used with @time)
|
||||
@time_now = 0 # current time
|
||||
@max_depth = 4
|
||||
@max_depth = 3
|
||||
|
||||
@debug = false
|
||||
|
||||
@@ -79,22 +79,7 @@ module.exports = class Test
|
||||
|
||||
getGeneratingFunctions: (user_num)=>
|
||||
types = @users[user_num]._model.operations
|
||||
[
|
||||
f : (y)=> # INSERT TEXT
|
||||
y
|
||||
pos = _.random 0, (y.val().length-1)
|
||||
y.insert pos, @getRandomText()
|
||||
null
|
||||
types: [Y.Text]
|
||||
,
|
||||
f : (y)-> # DELETE TEXT
|
||||
if y.val().length > 0
|
||||
pos = _.random 0, (y.val().length-1) # TODO: put here also arbitrary number (test behaviour in error cases)
|
||||
length = _.random 0, (y.val().length - pos)
|
||||
ops1 = y.delete pos, length
|
||||
undefined
|
||||
types : [Y.Text]
|
||||
]
|
||||
[]
|
||||
getRandomRoot: (user_num)->
|
||||
throw new Error "implement me!"
|
||||
|
||||
@@ -103,11 +88,14 @@ module.exports = class Test
|
||||
true
|
||||
else if o1._name? and o1._name isnt o2._name
|
||||
throw new Error "different types"
|
||||
else if o1._name is "Object" or o1.type is "MapManager"
|
||||
else if o1._model?
|
||||
@compare o1._model, o2._model, depth
|
||||
else if o1.type is "MapManager"
|
||||
for name, val of o1.val()
|
||||
@compare(val, o2.val(name), depth-1)
|
||||
else if o1._name?
|
||||
@compare(o1.val(), o2.val(), depth-1)
|
||||
else if o1.type is "ListManager"
|
||||
for val,i in o1.val()
|
||||
@compare(val, o2.val(i), depth-1)
|
||||
else if o1.constructor is Array and o2.constructor is Array
|
||||
if o1.length isnt o2.length
|
||||
throw new Error "The Arrays do not have the same size!"
|
||||
|
||||
@@ -1,171 +0,0 @@
|
||||
chai = require('chai')
|
||||
expect = chai.expect
|
||||
should = chai.should()
|
||||
sinon = require('sinon')
|
||||
sinonChai = require('sinon-chai')
|
||||
_ = require("underscore")
|
||||
|
||||
chai.use(sinonChai)
|
||||
|
||||
Y = require "../lib/y"
|
||||
Y.Text = require "../lib/Types/Text"
|
||||
|
||||
Connector = require "../../y-test/lib/y-test.coffee"
|
||||
|
||||
Test = require "./TestSuite"
|
||||
class TextTest extends Test
|
||||
|
||||
constructor: (suffix)->
|
||||
super suffix, Y
|
||||
|
||||
type: "TextTest"
|
||||
|
||||
makeNewUser: (userId)->
|
||||
conn = new Connector userId
|
||||
new Y conn
|
||||
|
||||
initUsers: (u)->
|
||||
u.val("TextTest",new Y.Text())
|
||||
|
||||
getRandomRoot: (user_num)->
|
||||
@users[user_num].val("TextTest")
|
||||
|
||||
getContent: (user_num)->
|
||||
@users[user_num].val("TextTest").val()
|
||||
|
||||
describe "TextFramework", ->
|
||||
@timeout 500000
|
||||
|
||||
beforeEach (done)->
|
||||
@yTest = new TextTest()
|
||||
done()
|
||||
|
||||
it "simple multi-char insert", ->
|
||||
u = @yTest.users[0].val("TextTest")
|
||||
u.insert 0, "abc"
|
||||
u = @yTest.users[1].val("TextTest")
|
||||
u.insert 0, "xyz"
|
||||
@yTest.compareAll()
|
||||
u.delete 0, 1
|
||||
@yTest.compareAll()
|
||||
expect(u.val()).to.equal("bcxyz")
|
||||
|
||||
it "Observers work on shared Text (insert type observers, local and foreign)", ->
|
||||
u = @yTest.users[0].val("TextTest",new Y.Text("my awesome Text")).val("TextTest")
|
||||
@yTest.flushAll()
|
||||
last_task = null
|
||||
observer1 = (changes)->
|
||||
expect(changes.length).to.equal(1)
|
||||
change = changes[0]
|
||||
expect(change.type).to.equal("insert")
|
||||
expect(change.object).to.equal(u)
|
||||
expect(change.value).to.equal("a")
|
||||
expect(change.position).to.equal(1)
|
||||
expect(change.changedBy).to.equal('0')
|
||||
last_task = "observer1"
|
||||
u.observe observer1
|
||||
u.insert 1, "a"
|
||||
expect(last_task).to.equal("observer1")
|
||||
u.unobserve observer1
|
||||
|
||||
observer2 = (changes)->
|
||||
expect(changes.length).to.equal(1)
|
||||
change = changes[0]
|
||||
expect(change.type).to.equal("insert")
|
||||
expect(change.object).to.equal(u)
|
||||
expect(change.value).to.equal("x")
|
||||
expect(change.position).to.equal(0)
|
||||
expect(change.changedBy).to.equal('1')
|
||||
last_task = "observer2"
|
||||
u.observe observer2
|
||||
v = @yTest.users[1].val("TextTest")
|
||||
v.insert 0, "x"
|
||||
@yTest.flushAll()
|
||||
expect(last_task).to.equal("observer2")
|
||||
u.unobserve observer2
|
||||
|
||||
it "Observers work on shared Text (delete type observers, local and foreign)", ->
|
||||
u = @yTest.users[0].val("TextTest",new Y.Text("my awesome Text")).val("TextTest")
|
||||
@yTest.flushAll()
|
||||
last_task = null
|
||||
observer1 = (changes)->
|
||||
expect(changes.length).to.equal(1)
|
||||
change = changes[0]
|
||||
expect(change.type).to.equal("delete")
|
||||
expect(change.object).to.equal(u)
|
||||
expect(change.position).to.equal(1)
|
||||
expect(change.length).to.equal(1)
|
||||
expect(change.changedBy).to.equal('0')
|
||||
last_task = "observer1"
|
||||
u.observe observer1
|
||||
u.delete 1, 1
|
||||
expect(last_task).to.equal("observer1")
|
||||
u.unobserve observer1
|
||||
|
||||
observer2 = (changes)->
|
||||
expect(changes.length).to.equal(1)
|
||||
change = changes[0]
|
||||
expect(change.type).to.equal("delete")
|
||||
expect(change.object).to.equal(u)
|
||||
expect(change.position).to.equal(0)
|
||||
expect(change.length).to.equal(1)
|
||||
expect(change.changedBy).to.equal('1')
|
||||
last_task = "observer2"
|
||||
u.observe observer2
|
||||
v = @yTest.users[1].val("TextTest")
|
||||
v.delete 0, 1
|
||||
@yTest.flushAll()
|
||||
expect(last_task).to.equal("observer2")
|
||||
u.unobserve observer2
|
||||
|
||||
it "can handle many engines, many operations, concurrently (random)", ->
|
||||
console.log("testiy deleted this TODO:dtrn")
|
||||
@yTest.run()
|
||||
|
||||
it "handles double-late-join", ->
|
||||
test = new TextTest("double")
|
||||
test.run()
|
||||
@yTest.run()
|
||||
u1 = test.users[0]
|
||||
u2 = @yTest.users[1]
|
||||
ops1 = u1._model.HB._encode()
|
||||
ops2 = u2._model.HB._encode()
|
||||
u1._model.engine.applyOp ops2, true
|
||||
u2._model.engine.applyOp ops1, true
|
||||
compare = (o1, o2)->
|
||||
if o1._name? and o1._name isnt o2._name
|
||||
throw new Error "different types"
|
||||
else if o1._name is "Object"
|
||||
for name, val of o1.val()
|
||||
compare(val, o2.val(name))
|
||||
else if o1._name?
|
||||
compare(o1.val(), o2.val())
|
||||
else if o1 isnt o2
|
||||
throw new Error "different values"
|
||||
compare u1, u2
|
||||
expect(test.getContent(0)).to.deep.equal(@yTest.getContent(1))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,479 +0,0 @@
|
||||
chai = require('chai')
|
||||
expect = chai.expect
|
||||
should = chai.should()
|
||||
sinon = require('sinon')
|
||||
sinonChai = require('sinon-chai')
|
||||
_ = require("underscore")
|
||||
$ = require('jquery')
|
||||
|
||||
chai.use(sinonChai)
|
||||
|
||||
Y = require "../lib/y.coffee"
|
||||
Y.Test = require "../../y-test/lib/y-test.coffee"
|
||||
|
||||
Y.List = require "../lib/Types/List"
|
||||
Y.Xml = require "../lib/Types/Xml"
|
||||
Y.Text = require "../lib/Types/Text"
|
||||
|
||||
Test = require "./TestSuite"
|
||||
|
||||
class XmlTest extends Test
|
||||
|
||||
constructor: (suffix)->
|
||||
super suffix, Y
|
||||
@doSomething_amount *= 20
|
||||
|
||||
makeNewUser: (userId)->
|
||||
conn = new Y.Test userId
|
||||
super new Y conn
|
||||
|
||||
initUsers: (u)->
|
||||
u.val("xml",new Y.Xml("div"))
|
||||
|
||||
type: "XmlTest"
|
||||
|
||||
compare: (o1, o2, depth)->
|
||||
if o1.constructor is Y.Xml
|
||||
super o1._model, o2._model, depth
|
||||
else
|
||||
super
|
||||
|
||||
getRandomRoot: (user_num, root, depth = @max_depth)->
|
||||
root ?= @users[user_num].val("xml")
|
||||
if depth is 0 or _.random(0,1) is 1 # take root
|
||||
root
|
||||
else # take child
|
||||
elems = null
|
||||
if root._name is "Xml"
|
||||
elems = root.getChildren()
|
||||
else
|
||||
return root
|
||||
|
||||
elems = elems.filter (elem)->
|
||||
elem._name is "Xml"
|
||||
if elems.length is 0
|
||||
root
|
||||
else
|
||||
p = elems[_.random(0, elems.length-1)]
|
||||
@getRandomRoot user_num, p, depth--
|
||||
|
||||
getRandomXmlElement: ()->
|
||||
if _.random(0,1) is 0
|
||||
new Y.Xml(@getRandomKey())
|
||||
else
|
||||
@getRandomText()
|
||||
|
||||
getGeneratingFunctions: (user_num)->
|
||||
that = @
|
||||
super(user_num).concat [
|
||||
f : (y)=> # set Attribute
|
||||
y.attr(that.getRandomKey(), that.getRandomText())
|
||||
types: [Y.Xml]
|
||||
,
|
||||
f : (y)-> # DELETE Attribute
|
||||
keys = Object.keys(y.attr())
|
||||
y.removeAttr(keys[_.random(0,keys.length-1)])
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # Add Class
|
||||
y.addClass(that.getRandomKey())
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # toggleClass
|
||||
y.toggleClass(that.getRandomKey())
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # Remove Class
|
||||
keys = y.attr("class").split(" ")
|
||||
y.removeClass(keys[_.random(0,keys.length-1)])
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # append XML
|
||||
child = that.getRandomXmlElement()
|
||||
y.append(child)
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # pepend XML
|
||||
child = that.getRandomXmlElement()
|
||||
y.prepend child
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # after XML
|
||||
if y.getParent()?
|
||||
child = that.getRandomXmlElement()
|
||||
y.after child
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # before XML
|
||||
if y.getParent()?
|
||||
child = that.getRandomXmlElement()
|
||||
y.before child
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # empty
|
||||
y.empty()
|
||||
types : [Y.Xml]
|
||||
,
|
||||
f : (y)-> # remove
|
||||
if y.getParent()?
|
||||
y.remove()
|
||||
types : [Y.Xml]
|
||||
]
|
||||
|
||||
describe "Y-Xml", ->
|
||||
@timeout 500000
|
||||
|
||||
beforeEach (done)->
|
||||
@yTest = new XmlTest()
|
||||
@users = @yTest.users
|
||||
|
||||
@u1 = @users[1].val("xml")
|
||||
@u2 = @users[2].val("xml")
|
||||
@u3 = @users[3].val("xml")
|
||||
done()
|
||||
|
||||
it "can handle many engines, many operations, concurrently (random)", ->
|
||||
console.log "" # TODO
|
||||
@yTest.run()
|
||||
console.log(@yTest.users[0].val("xml")+"")
|
||||
|
||||
it "has a working test suite", ->
|
||||
@yTest.compareAll()
|
||||
|
||||
it "handles double-late-join", ->
|
||||
test = new XmlTest("double")
|
||||
test.run()
|
||||
@yTest.run()
|
||||
u1 = test.users[0]
|
||||
u2 = @yTest.users[1]
|
||||
ops1 = u1._model.HB._encode()
|
||||
ops2 = u2._model.HB._encode()
|
||||
u1._model.engine.applyOp ops2, true
|
||||
u2._model.engine.applyOp ops1, true
|
||||
|
||||
it "Create Xml Element", ->
|
||||
@u1.attr("stuff", "true")
|
||||
console.log(@u1.toString())
|
||||
@yTest.compareAll()
|
||||
|
||||
describe "has method ", ->
|
||||
it "attr", ->
|
||||
@u1.attr("attr", "newAttr")
|
||||
@u1.attr("other_attr", "newAttr")
|
||||
@yTest.compareAll()
|
||||
expect(@u2.attr("attr")).to.equal("newAttr")
|
||||
expect(@u2.attr().other_attr).to.equal("newAttr")
|
||||
|
||||
it "addClass", ->
|
||||
@u1.addClass("newClass")
|
||||
@u2.addClass("otherClass")
|
||||
@yTest.compareAll()
|
||||
expect(@u1.attr("class")).to.equal("newClass otherClass") # 1 < 2 and therefore this is the proper order
|
||||
|
||||
|
||||
it "append", ->
|
||||
child = new Y.Xml("child")
|
||||
child2 = new Y.Xml("child2")
|
||||
@u1.append child
|
||||
@u1.append child2
|
||||
expect(@u1.toString()).to.equal("<div><child></child><child2></child2></div>")
|
||||
@yTest.compareAll()
|
||||
|
||||
it "prepend", ->
|
||||
child = new Y.Xml("child")
|
||||
child2 = new Y.Xml("child2")
|
||||
@u1.prepend child2
|
||||
@u1.prepend child
|
||||
expect(@u1.toString()).to.equal("<div><child></child><child2></child2></div>")
|
||||
@yTest.compareAll()
|
||||
|
||||
it "after", ->
|
||||
child = new Y.Xml("child")
|
||||
@u1.append child
|
||||
child.after new Y.Xml("right-child")
|
||||
expect(@u1.toString()).to.equal("<div><child></child><right-child></right-child></div>")
|
||||
@yTest.compareAll()
|
||||
|
||||
it "before", ->
|
||||
child = new Y.Xml("child")
|
||||
@u1.append child
|
||||
child.before new Y.Xml("left-child")
|
||||
expect(@u1.toString()).to.equal("<div><left-child></left-child><child></child></div>")
|
||||
@yTest.compareAll()
|
||||
|
||||
it "empty", ->
|
||||
child = new Y.Xml("child")
|
||||
@u1.append child
|
||||
child.before new Y.Xml("left-child")
|
||||
expect(@u1.toString()).to.equal("<div><left-child></left-child><child></child></div>")
|
||||
@yTest.compareAll()
|
||||
@u1.empty()
|
||||
expect(@u1.toString()).to.equal("<div></div>")
|
||||
@yTest.compareAll()
|
||||
|
||||
it "remove", ->
|
||||
child = new Y.Xml("child")
|
||||
child2 = new Y.Xml("child2")
|
||||
@u1.prepend child2
|
||||
@u1.prepend child
|
||||
expect(@u1.toString()).to.equal("<div><child></child><child2></child2></div>")
|
||||
@yTest.compareAll()
|
||||
child2.remove()
|
||||
expect(@u1.toString()).to.equal("<div><child></child></div>")
|
||||
|
||||
it "removeAttr", ->
|
||||
@u1.attr("dtrn", "stuff")
|
||||
@u1.attr("dutrianern", "stuff")
|
||||
@yTest.compareAll()
|
||||
@u2.removeAttr("dtrn")
|
||||
@yTest.compareAll()
|
||||
expect(@u3.attr("dtrn")).to.be.undefined
|
||||
|
||||
it "removeClass", ->
|
||||
@u1.addClass("dtrn")
|
||||
@u1.addClass("iExist")
|
||||
@yTest.compareAll()
|
||||
@u2.removeClass("dtrn")
|
||||
@yTest.compareAll()
|
||||
expect(@u3.attr("class")).to.equal("iExist")
|
||||
|
||||
it "toggleClass", ->
|
||||
@u1.addClass("dtrn")
|
||||
@u1.addClass("iExist")
|
||||
@yTest.compareAll()
|
||||
@u2.removeClass("dtrn")
|
||||
@yTest.compareAll()
|
||||
expect(@u3.attr("class")).to.equal("iExist")
|
||||
@u3.toggleClass("iExist")
|
||||
@u3.toggleClass("wraa")
|
||||
@yTest.compareAll()
|
||||
expect(@u1.attr("class")).to.equal("wraa")
|
||||
|
||||
it "getParent", ->
|
||||
child = new Y.Xml("child")
|
||||
@u1.prepend(child)
|
||||
expect(@u1).to.equal(child.getParent())
|
||||
|
||||
it "getChildren", ->
|
||||
child = new Y.Xml("child")
|
||||
@u1.prepend(child)
|
||||
expect(@u1.getChildren()[0]).to.equal(child)
|
||||
|
||||
if not window?
|
||||
describe "skip DOM tests (only in browser environment)", ->
|
||||
it "", ->
|
||||
else
|
||||
describe "DOM binding ", ->
|
||||
beforeEach (done)->
|
||||
@dom = @u1.getDom()
|
||||
@j = $(@dom)
|
||||
done()
|
||||
|
||||
it "can transform to a new real Dom element", ->
|
||||
expect(@dom).to.not.be.undefined
|
||||
|
||||
it "supports dom.insertBefore", ->
|
||||
newdom = $("<p>dtrn</p>")[0]
|
||||
newdom2 = $("<p>dtrn2</p>")[0]
|
||||
@dom.insertBefore(newdom2, null)
|
||||
@dom.insertBefore(newdom, newdom2)
|
||||
expect(@u1+"").to.equal("<div><p>dtrn</p><p>dtrn2</p></div>")
|
||||
expect(@dom.outerHTML).to.equal("<div><p>dtrn</p><p>dtrn2</p></div>")
|
||||
|
||||
it "supports dom.appendChild", ->
|
||||
newdom = $("<p>dtrn</p>")[0]
|
||||
@dom.appendChild(newdom)
|
||||
expect(@u1+"").to.equal("<div><p>dtrn</p></div>")
|
||||
|
||||
it "supports dom.setAttribute", ->
|
||||
@dom.setAttribute("test_attribute", "newVal")
|
||||
expect(@u1.attr("test_attribute")).to.equal("newVal")
|
||||
expect(@dom.getAttribute("test_attribute")).to.equal("newVal")
|
||||
|
||||
it "supports dom.removeAttribute", ->
|
||||
@dom.setAttribute("test_attribute", "newVal")
|
||||
expect(@u1.attr("test_attribute")).to.equal("newVal")
|
||||
expect(@dom.getAttribute("test_attribute")).to.equal("newVal")
|
||||
@dom.removeAttribute("test_attribute")
|
||||
expect(@u1.attr("test_attribute")).to.be.undefined
|
||||
attr = @dom.getAttribute("test_attribute")
|
||||
expect(attr?).to.be.false
|
||||
|
||||
it "supports dom.removeChild", ->
|
||||
newdom = $("<p>dtrn</p>")[0]
|
||||
@dom.appendChild(newdom)
|
||||
expect(@u1+"").to.equal("<div><p>dtrn</p></div>")
|
||||
expect(@dom.outerHTML).to.equal("<div><p>dtrn</p></div>")
|
||||
|
||||
@dom.removeChild(newdom)
|
||||
expect(@dom.childNodes.length).to.equal(0)
|
||||
expect(@u1.getChildren().length).to.equal(0)
|
||||
|
||||
it "supports dom.replaceChild", ->
|
||||
dom = $("<p>dtrn</p>")[0]
|
||||
@dom.appendChild(dom)
|
||||
expect(@u1+"").to.equal("<div><p>dtrn</p></div>")
|
||||
expect(@dom.outerHTML).to.equal("<div><p>dtrn</p></div>")
|
||||
|
||||
newdom = $("<p>replaced</p>")[0]
|
||||
@dom.replaceChild(newdom, dom)
|
||||
expect(@dom.outerHTML).to.equal("<div><p>replaced</p></div>")
|
||||
expect(@u1+"").to.equal("<div><p>replaced</p></div>")
|
||||
|
||||
it "supports dom.classList.add", ->
|
||||
@dom.classList.add "classy"
|
||||
@dom.classList.add "moreclassy"
|
||||
expect(@u1.attr("class")).to.equal("classy moreclassy")
|
||||
expect(@dom.getAttribute("class")).to.equal("classy moreclassy")
|
||||
|
||||
|
||||
it "supports dom.textContent", ->
|
||||
dom = $("<p>dtrn</p>")[0]
|
||||
@dom.appendChild(dom)
|
||||
expect(@u1+"").to.equal("<div><p>dtrn</p></div>")
|
||||
expect(@dom.outerHTML).to.equal("<div><p>dtrn</p></div>")
|
||||
|
||||
@dom.textContent = ""
|
||||
expect(@u1+"").to.equal("<div></div>")
|
||||
expect(@dom.outerHTML).to.equal("<div></div>")
|
||||
|
||||
it "suppports dom.textContent (non empty string)", ->
|
||||
dom = $("<p>dtrn</p>")[0]
|
||||
@dom.appendChild(dom)
|
||||
expect(@u1+"").to.equal("<div><p>dtrn</p></div>")
|
||||
expect(@dom.outerHTML).to.equal("<div><p>dtrn</p></div>")
|
||||
|
||||
@dom.textContent = "stuff"
|
||||
expect(@u1+"").to.equal("<div>stuff</div>")
|
||||
expect(@dom.outerHTML).to.equal("<div>stuff</div>")
|
||||
|
||||
it "supports jquery.addClass", ->
|
||||
@j.addClass("testedy tested")
|
||||
expect(@dom.getAttribute("class")).to.equal("testedy tested")
|
||||
|
||||
it "supports jquery.after", ->
|
||||
d = $("<span></span>")
|
||||
@dom.appendChild(d[0], null)
|
||||
d.after("<div>after</div>")
|
||||
expect(@dom.outerHTML).to.equal("<div><span></span><div>after</div></div>")
|
||||
expect(@u1+"").to.equal("<div><span></span><div>after</div></div>")
|
||||
|
||||
it "supports jquery.append", ->
|
||||
d = $("<span></span>")[0]
|
||||
@j.append(d)
|
||||
d = $("<div></div>")[0]
|
||||
@j.append(d)
|
||||
expect(@dom.outerHTML).to.equal("<div><span></span><div></div></div>")
|
||||
expect(@u1+"").to.equal("<div><span></span><div></div></div>")
|
||||
|
||||
it "supports jquery.appendTo", ->
|
||||
$("<b>appendedTo</b>").appendTo(@dom)
|
||||
$("<p>").appendTo(@dom)
|
||||
expect(@dom.outerHTML).to.equal("<div><b>appendedTo</b><p></p></div>")
|
||||
expect(@u1+"").to.equal("<div><b>appendedTo</b><p></p></div>")
|
||||
|
||||
it "supports jquery.before", ->
|
||||
newdom = $("<p>")
|
||||
$(@dom).append(newdom)
|
||||
newdom.before("<div>before</div>")
|
||||
expect(@dom.outerHTML).to.equal("<div><div>before</div><p></p></div>")
|
||||
expect(@u1+"").to.equal("<div><div>before</div><p></p></div>")
|
||||
|
||||
it "supports jquery.detach", ->
|
||||
d = $("<p>")
|
||||
@j.append(d)
|
||||
d.detach()
|
||||
expect(@dom.outerHTML).to.equal("<div></div>")
|
||||
expect(@u1+"").to.equal("<div></div>")
|
||||
|
||||
it "supports jquery.empty", ->
|
||||
d = $("<p />")
|
||||
d.appendTo(@dom)
|
||||
d = $("<div />")
|
||||
d.appendTo(@dom)
|
||||
@j.empty()
|
||||
expect(@dom.outerHTML).to.equal("<div></div>")
|
||||
expect(@u1+"").to.equal("<div></div>")
|
||||
|
||||
it "supports jquery.insertAfter", ->
|
||||
d = $("<span>")
|
||||
d.appendTo(@dom)
|
||||
$("<p>after</p>").insertAfter(d)
|
||||
expect(@dom.outerHTML).to.equal("<div><span></span><p>after</p></div>")
|
||||
expect(@u1+"").to.equal("<div><span></span><p>after</p></div>")
|
||||
|
||||
it "supports jquery.insertBefore", ->
|
||||
d = $("<span>")
|
||||
d.appendTo(@j)
|
||||
$("<p>before</p>").insertBefore(d)
|
||||
expect(@dom.outerHTML).to.equal("<div><p>before</p><span></span></div>")
|
||||
expect(@u1+"").to.equal("<div><p>before</p><span></span></div>")
|
||||
|
||||
it "supports jquery.prepend", ->
|
||||
@j.prepend("<p>prepended2</p>")
|
||||
@j.prepend("<p>prepended1</p>")
|
||||
expect(@dom.outerHTML).to.equal("<div><p>prepended1</p><p>prepended2</p></div>")
|
||||
expect(@u1+"").to.equal("<div><p>prepended1</p><p>prepended2</p></div>")
|
||||
|
||||
it "supports jquery.prependTo", ->
|
||||
$("<p>prepended2</p>").prependTo(@j)
|
||||
$("<p>prepended1</p>").prependTo(@j)
|
||||
expect(@dom.outerHTML).to.equal("<div><p>prepended1</p><p>prepended2</p></div>")
|
||||
expect(@u1+"").to.equal("<div><p>prepended1</p><p>prepended2</p></div>")
|
||||
|
||||
it "supports jquery.remove", ->
|
||||
d = $("<div />")
|
||||
d.prependTo(@j)
|
||||
d.remove()
|
||||
expect(@dom.outerHTML).to.equal("<div></div>")
|
||||
expect(@u1+"").to.equal("<div></div>")
|
||||
|
||||
it "supports jquery.removeAttr", ->
|
||||
@dom.setAttribute("test_attribute", "newVal")
|
||||
expect(@u1.attr("test_attribute")).to.equal("newVal")
|
||||
expect(@dom.getAttribute("test_attribute")).to.equal("newVal")
|
||||
|
||||
@j.removeAttr("test_attribute")
|
||||
expect(@u1.attr("test_attribute")).to.be.undefined
|
||||
expect(@j.attr("test_attribute")).to.be.undefined
|
||||
|
||||
it "supports jquery.removeClass", ->
|
||||
@j.addClass("testedy tested")
|
||||
expect(@dom.getAttribute("class")).to.equal("testedy tested")
|
||||
|
||||
@j.removeClass("testedy")
|
||||
expect(@dom.getAttribute("class")).to.equal("tested")
|
||||
expect(@u1.hasClass("testedy")).to.be.false
|
||||
|
||||
it "supports jquery.attr", ->
|
||||
@j.attr("atone", "yeah")
|
||||
expect(@u1.attr("atone")).to.equal("yeah")
|
||||
expect(@j.attr("atone")).to.equal("yeah")
|
||||
|
||||
it "supports jquery.replaceAll", ->
|
||||
d = $("<p />")
|
||||
d.appendTo(@dom)
|
||||
d = $("<p />")
|
||||
d.appendTo(@dom)
|
||||
$("<span>").replaceAll($(@dom).find("p"))
|
||||
expect(@dom.outerHTML).to.equal("<div><span></span><span></span></div>")
|
||||
expect(@u1+"").to.equal("<div><span></span><span></span></div>")
|
||||
|
||||
it "supports jquery.replaceWith", ->
|
||||
d = $("<span>")
|
||||
@j.prepend(d)
|
||||
d = $("<span>")
|
||||
@j.prepend(d)
|
||||
d = $("<span>")
|
||||
@j.prepend(d)
|
||||
d = @j.find("span")
|
||||
d.replaceWith("<div></div>")
|
||||
|
||||
expect(@dom.outerHTML).to.equal("<div><div></div><div></div><div></div></div>")
|
||||
expect(@u1+"").to.equal("<div><div></div><div></div><div></div></div>")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
chai = require('chai')
|
||||
expect = chai.expect
|
||||
should = chai.should()
|
||||
sinon = require('sinon')
|
||||
sinonChai = require('sinon-chai')
|
||||
_ = require("underscore")
|
||||
$ = require("jquery")
|
||||
document?.$ = $ # for browser
|
||||
require 'coffee-errors'
|
||||
|
||||
chai.use(sinonChai)
|
||||
|
||||
Y = require "../lib/index"
|
||||
Connector = require "../../y-test/lib/y-test.coffee"
|
||||
|
||||
Test = require "./TestSuite"
|
||||
class XmlTest extends Test
|
||||
|
||||
type: "XmlTest"
|
||||
|
||||
makeNewUser: (user, conn)->
|
||||
super new Y.XmlFramework user, conn
|
||||
|
||||
getRandomRoot: (user_num)->
|
||||
@users[user_num].getSharedObject()
|
||||
|
||||
getContent: (user_num)->
|
||||
@users[user_num].val()
|
||||
|
||||
|
||||
describe "XmlFramework", ->
|
||||
beforeEach (done)->
|
||||
@timeout 50000
|
||||
@yTest = new XmlTest()
|
||||
###
|
||||
|
||||
@users = @yTest.users
|
||||
###
|
||||
test_users = []
|
||||
connector = (new Connector 0, test_users)
|
||||
@test_user = @yTest.makeNewUser 0, connector
|
||||
test_users.push @test_user
|
||||
# test_user_listen listens to the actions of test_user. He will update his dom when he receives from test_user.
|
||||
@test_user_listen = @yTest.makeNewUser 2, connector
|
||||
test_users.push @test_user_listen
|
||||
@test_user2 = @yTest.makeNewUser 1, (Connector_uninitialized [])
|
||||
|
||||
$("#test_dom").replaceWith('<div id="test_dom" test_attribute="the test" class="stuffy" style="color: blue"><p id="replaceme">replace me</p><p id="removeme">remove me</p><p>This is a test object for <b>XmlFramework</b></p><span class="span_element"><p>span</p></span></div>')
|
||||
@$dom = $("#test_dom")
|
||||
@dom = @$dom[0]
|
||||
@test_user.val(@dom)
|
||||
@test_user_listen.getConnector().flushAll()
|
||||
@test_user_listen_dom = @test_user_listen.val()
|
||||
|
||||
@check = ()=>
|
||||
dom_ = @dom.outerHTML
|
||||
# now test if other collaborators can parse the HB and result in the same content
|
||||
hb = @test_user.HB._encode()
|
||||
@test_user2.engine.applyOps(hb)
|
||||
dom2 = @test_user2.val()
|
||||
expect(dom_).to.equal(dom2.outerHTML)
|
||||
@test_user_listen.getConnector().flushAll()
|
||||
expect(dom_).to.equal(@test_user_listen_dom.outerHTML)
|
||||
done()
|
||||
|
||||
it "can transform to a new real Dom element", ->
|
||||
dom_ = @test_user.val(true)
|
||||
expect(dom_ isnt @dom).to.be.true
|
||||
|
||||
it "supports dom.insertBefore", ->
|
||||
newdom = $("<p>dtrn</p>")[0]
|
||||
newdom2 = $("<p>dtrn2</p>")[0]
|
||||
n = $("#removeme")[0]
|
||||
@dom.insertBefore(newdom, null)
|
||||
@dom.insertBefore(newdom2, n)
|
||||
@check()
|
||||
|
||||
it "supports dom.appendChild", ->
|
||||
newdom = $("<p>dtrn</p>")[0]
|
||||
@dom.appendChild(newdom)
|
||||
@check()
|
||||
|
||||
it "supports dom.setAttribute", ->
|
||||
@dom.setAttribute("test_attribute", "newVal")
|
||||
@check()
|
||||
|
||||
it "supports dom.removeAttribute", ->
|
||||
@dom.removeAttribute("test_attribute")
|
||||
@check()
|
||||
|
||||
it "supports dom.removeChild", ->
|
||||
@dom.removeChild($("#removeme")[0])
|
||||
expect($("#removeme").length).to.equal(0)
|
||||
@check()
|
||||
|
||||
it "supports dom.replaceChild", ->
|
||||
newdom = $("<p>replaced</p>")[0]
|
||||
replace = $("#replaceme")[0]
|
||||
@dom.replaceChild(newdom,replace)
|
||||
expect($("#replaceme").length).to.equal(0)
|
||||
@check()
|
||||
|
||||
it "supports dom.classList.add", ->
|
||||
@dom.classList.add "classy"
|
||||
@check()
|
||||
|
||||
|
||||
it "supports dom.textcontent", -> #TODO!!!!
|
||||
@dom.classList.add "classy"
|
||||
@check()
|
||||
|
||||
it "supports jquery.addClass", ->
|
||||
@$dom.addClass("testy")
|
||||
@check()
|
||||
|
||||
it "supports jquery.after", ->
|
||||
d = $("#test_dom p")
|
||||
d.after("<div class=\"inserted_after\">after</div>")
|
||||
@check()
|
||||
|
||||
it "supports jquery.append", ->
|
||||
d = $("#test_dom p")
|
||||
d.after("<b>appended</b>")
|
||||
@check()
|
||||
|
||||
it "supports jquery.appendTo", ->
|
||||
$("<b>appendedTo</b>").appendTo("#test_dom p")
|
||||
$("p").appendTo("#test_dom")
|
||||
@check()
|
||||
|
||||
it "supports jquery.before", ->
|
||||
d = $("#test_dom p")
|
||||
d.before("<div>before</div>")
|
||||
@check()
|
||||
|
||||
it "supports jquery.detach", ->
|
||||
d = $(".inserted_after")
|
||||
d.detach()
|
||||
@check()
|
||||
|
||||
it "supports jquery.empty", ->
|
||||
d = $("#test_dom p")
|
||||
d.empty()
|
||||
@check()
|
||||
|
||||
it "supports jquery.insertAfter", ->
|
||||
$("<p>after span</p>").insertAfter(".span_element")
|
||||
@check()
|
||||
|
||||
it "supports jquery.insertBefore", ->
|
||||
$("<p>before span</p>").insertBefore(".span_element")
|
||||
@check()
|
||||
|
||||
it "supports jquery.prepend", ->
|
||||
d = $("#test_dom div")
|
||||
d.prepend("<p>prepended</p>")
|
||||
@check()
|
||||
|
||||
it "supports jquery.prependTo", ->
|
||||
$("<p atone=false attwo=\"dtrn\" class=\"attr_node sudo su\">prepended to</p>").prependTo("#test_dom div")
|
||||
@check()
|
||||
|
||||
it "supports jquery.remove", ->
|
||||
d = $("#test_dom b")
|
||||
d.remove()
|
||||
@check()
|
||||
|
||||
it "supports jquery.removeAttr", ->
|
||||
d = $(".attr_node")
|
||||
d.removeAttr("attwo")
|
||||
@check()
|
||||
|
||||
it "supports jquery.removeClass", ->
|
||||
d = $(".attr_node")
|
||||
d.removeClass("sudo")
|
||||
@check()
|
||||
|
||||
it "supports jquery.attr", ->
|
||||
d = $(".attr_node")
|
||||
d.attr("atone", true)
|
||||
@check()
|
||||
|
||||
it "supports jquery.replaceAll", ->
|
||||
$("<span>New span content </span>").replaceAll("#test_dom div")
|
||||
@check()
|
||||
|
||||
it "supports jquery.replaceWith", ->
|
||||
d = $("#test_dom span")
|
||||
d.replaceWith("<div>me is div again </div>")
|
||||
@check()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9,12 +9,11 @@ chai.use(sinonChai)
|
||||
|
||||
Y = require "../lib/y.coffee"
|
||||
Y.Test = require "../../y-test/lib/y-test.coffee"
|
||||
Y.Text = require "../lib/Types/Text"
|
||||
Y.List = require "../lib/Types/List"
|
||||
Y.Text = require "../../y-text/lib/y-text"
|
||||
Y.List = require "../../y-list/lib/y-list"
|
||||
|
||||
Test = require "./TestSuite"
|
||||
|
||||
class JsonTest extends Test
|
||||
TestSuite = require "./TestSuite"
|
||||
class ObjectTest extends TestSuite
|
||||
|
||||
constructor: (suffix)->
|
||||
super suffix, Y
|
||||
@@ -23,7 +22,7 @@ class JsonTest extends Test
|
||||
conn = new Y.Test userId
|
||||
super new Y conn
|
||||
|
||||
type: "JsonTest"
|
||||
type: "ObjectTest"
|
||||
|
||||
getRandomRoot: (user_num, root, depth = @max_depth)->
|
||||
root ?= @users[user_num]
|
||||
@@ -67,11 +66,9 @@ class JsonTest extends Test
|
||||
y.val(@getRandomKey(), new Y.Text(@getRandomText()))
|
||||
types: [Y.Object]
|
||||
,
|
||||
f : (y)=> # SET PROPERTY (primitive)
|
||||
l = y.val().length
|
||||
y.val(_.random(0, l-1), @getRandomText())
|
||||
null
|
||||
types : [Y.List]
|
||||
f : (y)=> # SET PROPERTY List
|
||||
y.val(@getRandomKey(), new Y.List(@getRandomText().split("")))
|
||||
types: [Y.Object]
|
||||
,
|
||||
f : (y)=> # Delete Array Element
|
||||
list = y.val()
|
||||
@@ -82,17 +79,22 @@ class JsonTest extends Test
|
||||
,
|
||||
f : (y)=> # insert Object mutable
|
||||
l = y.val().length
|
||||
y.val(_.random(0, l-1), new Y.Object(@getRamdomObject()))
|
||||
y.insert(_.random(0, l-1), new Y.Object(@getRandomObject()))
|
||||
types: [Y.List]
|
||||
,
|
||||
f : (y)=> # insert Text mutable
|
||||
l = y.val().length
|
||||
y.val(_.random(0, l-1), new Y.Text(@getRandomText()))
|
||||
y.insert(_.random(0, l-1), new Y.Text(@getRandomText()))
|
||||
types : [Y.List]
|
||||
,
|
||||
f : (y)=> # insert List mutable
|
||||
l = y.val().length
|
||||
y.insert(_.random(0, l-1), new Y.List(@getRandomText().split("")))
|
||||
types : [Y.List]
|
||||
,
|
||||
f : (y)=> # insert Number (primitive object)
|
||||
l = y.val().length
|
||||
y.val(_.random(0,l-1), _.random(0,42))
|
||||
y.insert(_.random(0,l-1), _.random(0,42))
|
||||
types : [Y.List]
|
||||
,
|
||||
f : (y)=> # SET Object Property (circular)
|
||||
@@ -101,18 +103,32 @@ class JsonTest extends Test
|
||||
,
|
||||
f : (y)=> # insert Object mutable (circular)
|
||||
l = y.val().length
|
||||
y.val(_.random(0, l-1), @getRandomRoot user_num)
|
||||
y.insert(_.random(0, l-1), @getRandomRoot user_num)
|
||||
types: [Y.List]
|
||||
,
|
||||
f : (y)=> # INSERT TEXT
|
||||
y
|
||||
pos = _.random 0, (y.val().length-1)
|
||||
y.insert pos, @getRandomText()
|
||||
null
|
||||
types: [Y.Text]
|
||||
,
|
||||
f : (y)-> # DELETE TEXT
|
||||
if y.val().length > 0
|
||||
pos = _.random 0, (y.val().length-1) # TODO: put here also arbitrary number (test behaviour in error cases)
|
||||
length = _.random 0, (y.val().length - pos)
|
||||
ops1 = y.delete pos, length
|
||||
undefined
|
||||
types : [Y.Text]
|
||||
]
|
||||
###
|
||||
|
||||
###
|
||||
module.exports = ObjectTest
|
||||
|
||||
describe "JsonFramework", ->
|
||||
describe "Object Test", ->
|
||||
@timeout 500000
|
||||
|
||||
beforeEach (done)->
|
||||
@yTest = new JsonTest()
|
||||
@yTest = new ObjectTest()
|
||||
@users = @yTest.users
|
||||
|
||||
@test_user = @yTest.makeNewUser "test_user"
|
||||
@@ -126,7 +142,7 @@ describe "JsonFramework", ->
|
||||
@yTest.compareAll()
|
||||
|
||||
it "handles double-late-join", ->
|
||||
test = new JsonTest("double")
|
||||
test = new ObjectTest("double")
|
||||
test.run()
|
||||
@yTest.run()
|
||||
u1 = test.users[0]
|
||||
Reference in New Issue
Block a user