Introduced a new model for custom collaborative types.

This commit is contained in:
DadaMonad
2015-01-16 19:13:01 +00:00
parent b647b2af58
commit f1f710b269
15 changed files with 1019 additions and 1311 deletions

View File

@@ -45,19 +45,19 @@ class JsonTest extends Test
f : (y)=> # SET PROPERTY
y.val(@getRandomKey(), @getRandomText(), 'immutable')
null
types : [types.JsonType]
types : [types.Object]
,
f : (y)=> # SET Object Property 1)
y.val(@getRandomObject())
types: [types.JsonType]
types: [types.Object]
,
f : (y)=> # SET Object Property 2)
y.val(@getRandomKey(), @getRandomObject())
types: [types.JsonType]
types: [types.Object]
,
f : (y)=> # SET PROPERTY TEXT
y.val(@getRandomKey(), @getRandomText(), 'mutable')
types: [types.JsonType]
types: [types.Object]
]
describe "JsonFramework", ->
@@ -73,30 +73,6 @@ describe "JsonFramework", ->
console.log "" # TODO
@yTest.run()
### TODO
it "has a update listener", ()->
addName = false
change = false
change2 = 0
@test_user.on 'add', (eventname, property_name)->
if property_name is 'x'
addName = true
@test_user.val('x',5)
@test_user.on 'change', (eventname, property_name)->
if property_name is 'x'
change = true
@test_user.val('x', 6)
@test_user.val('ins', "text", 'mutable')
@test_user.on 'update', (eventname, property_name)->
if property_name is 'ins'
change2++
@test_user.val('ins').insertText 4, " yay"
@test_user.val('ins').deleteText 0, 4
expect(addName).to.be.ok
expect(change).to.be.ok
expect(change2).to.equal 8
###
it "has a working test suite", ->
@yTest.compareAll()
@@ -119,9 +95,9 @@ describe "JsonFramework", ->
@yTest.users[1].val('a', 't', "mutable")
@yTest.compareAll()
q = @yTest.users[2].val('a')
q.insertText(0,'A')
q.insert(0,'A')
@yTest.compareAll()
expect(@yTest.getSomeUser().value.a.val()).to.equal("At")
expect(@yTest.getSomeUser().val("a").val()).to.equal("At")
it "can handle creaton of complex json (2)", ->
@yTest.getSomeUser().val('x', {'a':'b'})
@@ -130,10 +106,18 @@ describe "JsonFramework", ->
@yTest.getSomeUser().val('c', {'a':'c'})
@yTest.getSomeUser().val('c', {'a':'b'})
@yTest.compareAll()
q = @yTest.getSomeUser().value.a.a.q
q.insertText(0,'A')
q = @yTest.getSomeUser().val("a").val("a").val("q")
q.insert(0,'A')
@yTest.compareAll()
expect(@yTest.getSomeUser().val("a").val("a").val("q").val()).to.equal("Adtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")
it "can handle creaton of complex json (3)", ->
@yTest.users[0].val('l', [1,2,3], "mutable")
@yTest.users[1].val('l', [4,5,6], "mutable")
@yTest.compareAll()
@yTest.users[2].val('l').insert(0,'A')
@yTest.users[1].val('l').insert(0,'B')
@yTest.compareAll()
expect(@yTest.getSomeUser().value.a.a.q.val()).to.equal("Adtrndtrtdrntdrnrtdnrtdnrtdnrtdnrdnrdt")
it "handles immutables and primitive data types", ->
@yTest.getSomeUser().val('string', "text", "immutable")

View File

@@ -12,9 +12,9 @@ Connector = require "../bower_components/connector/lib/test-connector/test-conne
module.exports = class Test
constructor: (@name_suffix = "")->
@number_of_test_cases_multiplier = 1
@repeat_this = 503 * @number_of_test_cases_multiplier
@doSomething_amount = 5 * @number_of_test_cases_multiplier
@number_of_engines = 3 + @number_of_test_cases_multiplier - 1
@repeat_this = 3 * @number_of_test_cases_multiplier
@doSomething_amount = 123 * @number_of_test_cases_multiplier
@number_of_engines = 5 + @number_of_test_cases_multiplier - 1
@time = 0 # denotes to the time when run was started
@ops = 0 # number of operations (used with @time)
@@ -31,6 +31,7 @@ module.exports = class Test
for user in @users
u.getConnector().join(user.getConnector()) # TODO: change the test-connector to make this more convenient
@users.push u
@initUsers?(@users[0])
@flushAll()
# is called by implementing class
@@ -74,17 +75,17 @@ module.exports = class Test
f : (y)=> # INSERT TEXT
y
pos = _.random 0, (y.val().length-1)
y.insertText pos, @getRandomText()
y.insert pos, @getRandomText()
null
types: [types.WordType]
types: [types.String]
,
f : (y)-> # DELETE TEXT
if y.val().length > 0
pos = _.random 0, (y.val().length-1)
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.deleteText pos, length
ops1 = y.delete pos, length
undefined
types : [types.WordType]
types : [types.String]
]
getRandomRoot: (user_num)->
throw new Error "overwrite me!"
@@ -99,7 +100,7 @@ module.exports = class Test
y instanceof type
if choices.length is 0
throw new Error "You forgot to specify a test generation methot for this Operation!"
throw new Error "You forgot to specify a test generation methot for this Operation! (#{y.type})"
i = _.random 0, (choices.length-1)
choices[i].f y

View File

@@ -19,6 +19,9 @@ class TextTest extends Test
conn = new Connector userId
new Yatta conn
initUsers: (u)->
u.val("TextTest","","mutable")
getRandomRoot: (user_num)->
@users[user_num].val("TextTest")
@@ -29,21 +32,17 @@ describe "TextFramework", ->
beforeEach (done)->
@timeout 50000
@yTest = new TextTest()
@users = @yTest.users
test_user_connector = new Connector 'test_user'
@test_user = @yTest.makeNewUser 'test_user', test_user_connector
test_user_connector.join @users[0].connector
@users[0].val("TextTest","","mutable")
@yTest.flushAll()
done()
it "simple multi-char insert", ->
u = @yTest.users[0].val("TextTest")
u.insertText 0, "abc"
u.insert 0, "abc"
u = @yTest.users[1].val("TextTest")
u.insertText 0, "xyz"
u.insert 0, "xyz"
@yTest.compareAll()
expect(u.val()).to.equal("abcxyz")
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","my awesome Text","mutable").val("TextTest")
@@ -59,7 +58,7 @@ describe "TextFramework", ->
expect(change.changedBy).to.equal('0')
last_task = "observer1"
u.observe observer1
u.insertText 1, "a"
u.insert 1, "a"
expect(last_task).to.equal("observer1")
u.unobserve observer1
@@ -74,7 +73,7 @@ describe "TextFramework", ->
last_task = "observer2"
u.observe observer2
v = @yTest.users[1].val("TextTest")
v.insertText 0, "x"
v.insert 0, "x"
@yTest.flushAll()
expect(last_task).to.equal("observer2")
u.unobserve observer2
@@ -93,7 +92,7 @@ describe "TextFramework", ->
expect(change.changedBy).to.equal('0')
last_task = "observer1"
u.observe observer1
u.deleteText 1, 1
u.delete 1, 1
expect(last_task).to.equal("observer1")
u.unobserve observer1
@@ -108,7 +107,7 @@ describe "TextFramework", ->
last_task = "observer2"
u.observe observer2
v = @yTest.users[1].val("TextTest")
v.deleteText 0, 1
v.delete 0, 1
@yTest.flushAll()
expect(last_task).to.equal("observer2")
u.unobserve observer2