tests are no longer failing :)

This commit is contained in:
DadaMonad
2015-02-23 13:20:39 +00:00
parent 2e9f8f6d03
commit f189ae11b0
21 changed files with 510 additions and 852 deletions
+25 -351
View File
File diff suppressed because one or more lines are too long
+24 -350
View File
File diff suppressed because one or more lines are too long
+5 -1
View File
@@ -245,7 +245,11 @@ module.exports = function() {
Insert.prototype.type = "Insert";
Insert.prototype.val = function() {
return this.content;
if ((this.content != null) && (this.content.getCustomType != null)) {
return this.content.getCustomType();
} else {
return this.content;
}
};
Insert.prototype.applyDelete = function(o) {
+8 -5
View File
@@ -51,7 +51,7 @@ module.exports = function() {
rep = content;
}
this.retrieveSub(name).replace(rep);
return this;
return this.getCustomType();
} else if (name != null) {
prop = this._map[name];
if ((prop != null) && !prop.isContentDeleted()) {
@@ -201,7 +201,7 @@ module.exports = function() {
result = [];
while (o !== this.end) {
if (!o.is_deleted) {
result.push(o);
result.push(o.val());
}
o = o.next_cl;
}
@@ -285,6 +285,9 @@ module.exports = function() {
} else {
for (_i = 0, _len = content.length; _i < _len; _i++) {
c = content[_i];
if ((c != null) && (c._name != null) && (c._getModel != null)) {
c = c._getModel(this.custom_types, this.operations);
}
tmp = (new ops.Insert(null, c, void 0, left, right)).execute();
left = tmp;
}
@@ -345,7 +348,7 @@ module.exports = function() {
this.event_properties = _at_event_properties;
this.event_this = _at_event_this;
if (this.event_properties['object'] == null) {
this.event_properties['object'] = this.event_this;
this.event_properties['object'] = this.event_this.getCustomType();
}
ReplaceManager.__super__.constructor.call(this, custom_type, uid, beginning, end);
}
@@ -465,7 +468,7 @@ module.exports = function() {
var old_value;
if (this.next_cl.type === "Delimiter" && this.prev_cl.type !== "Delimiter") {
if (!this.is_deleted) {
old_value = this.prev_cl.content;
old_value = this.prev_cl.val();
this.parent.callEventDecorator([
{
type: "update",
@@ -494,7 +497,7 @@ module.exports = function() {
{
type: "delete",
changedBy: o.uid.creator,
oldValue: this.content
oldValue: this.val()
}
]);
}
+71
View File
@@ -0,0 +1,71 @@
var YList;
YList = (function() {
function YList(list) {
if (list == null) {
this._list = [];
} else if (list.constructor === Array) {
this._list = list;
} else {
throw new Error("Y.List expects an Array as a parameter");
}
}
YList.prototype._name = "List";
YList.prototype._getModel = function(types, ops) {
if (this._model == null) {
this._model = new ops.ListManager(this).execute();
this.insert(0, this._list);
}
delete this._list;
return this._model;
};
YList.prototype._setModel = function(_at__model) {
this._model = _at__model;
return delete this._list;
};
YList.prototype.val = function() {
return this._model.val.apply(this._model, arguments);
};
YList.prototype.observe = function() {
this._model.observe.apply(this._model, arguments);
return this;
};
YList.prototype.unobserve = function() {
this._model.unobserve.apply(this._model, arguments);
return this;
};
YList.prototype.insert = function(position, content) {
if (typeof position !== "number") {
throw new Error("Y.List.insert expects a Number as the first parameter!");
}
this._model.insert(position, content);
return this;
};
YList.prototype["delete"] = function(position, length) {
this._model["delete"](position, length);
return this;
};
return YList;
})();
if (typeof window !== "undefined" && window !== null) {
if (window.Y != null) {
window.Y.List = YList;
} else {
throw new Error("You must first import Y!");
}
}
if (typeof module !== "undefined" && module !== null) {
module.exports = YList;
}
+9 -2
View File
@@ -39,7 +39,13 @@ YObject = (function() {
};
YObject.prototype.observe = function(f) {
return this._model.observe(f);
this._model.observe(f);
return this;
};
YObject.prototype.unobserve = function(f) {
this._model.unobserve(f);
return this;
};
YObject.prototype.val = function(name, content) {
@@ -64,7 +70,8 @@ YObject = (function() {
};
YObject.prototype["delete"] = function(name) {
return this._model["delete"](name);
this._model["delete"](name);
return this;
};
return YObject;
+1 -1
View File
@@ -52,7 +52,7 @@ YText = (function() {
throw new Error("Y.String.insert expects a String as the second parameter!");
}
if (typeof position !== "number") {
throw new Error("Y.String.insert expects a Number as the second parameter!");
throw new Error("Y.String.insert expects a Number as the first parameter!");
}
if (content.length > 0) {
ith = this._model.getOperationByPosition(position);
-2
View File
@@ -43,5 +43,3 @@ if (typeof window !== "undefined" && window !== null) {
}
createY.Object = require("./Types/Object");
createY.Text = require("./Types/Text");
+199 -96
View File
File diff suppressed because one or more lines are too long
+49 -22
View File
File diff suppressed because one or more lines are too long
+4 -1
View File
@@ -301,7 +301,10 @@ module.exports = ()->
type: "Insert"
val: ()->
@content
if @content? and @content.getCustomType?
@content.getCustomType()
else
@content
#
# set content to null and other stuff
+7 -5
View File
@@ -42,7 +42,7 @@ module.exports = ()->
else
rep = content
@retrieveSub(name).replace rep
@
@getCustomType()
else if name?
prop = @_map[name]
if prop? and not prop.isContentDeleted()
@@ -172,7 +172,7 @@ module.exports = ()->
result = []
while o isnt @end
if not o.is_deleted
result.push o
result.push o.val()
o = o.next_cl
result
@@ -243,6 +243,8 @@ module.exports = ()->
(new ops.Insert null, content, undefined, left, right).execute()
else
for c in content
if c? and c._name? and c._getModel?
c = c._getModel(@custom_types, @operations)
tmp = (new ops.Insert null, c, undefined, left, right).execute()
left = tmp
@
@@ -317,7 +319,7 @@ module.exports = ()->
# @param {Delimiter} end Reference or Object.
constructor: (custom_type, @event_properties, @event_this, uid, beginning, end)->
if not @event_properties['object']?
@event_properties['object'] = @event_this
@event_properties['object'] = @event_this.getCustomType()
super custom_type, uid, beginning, end
type: "ReplaceManager"
@@ -439,7 +441,7 @@ module.exports = ()->
if @next_cl.type is "Delimiter" and @prev_cl.type isnt "Delimiter"
# this replaces another Replaceable
if not @is_deleted # When this is received from the HB, this could already be deleted!
old_value = @prev_cl.content
old_value = @prev_cl.val()
@parent.callEventDecorator [
type: "update"
changedBy: @uid.creator
@@ -462,7 +464,7 @@ module.exports = ()->
@parent.callEventDecorator [
type: "delete"
changedBy: o.uid.creator
oldValue: @content
oldValue: @val()
]
#
+70
View File
@@ -0,0 +1,70 @@
class YList
#
# @private
# @param {Object} uid A unique identifier. If uid is undefined, a new uid will be created.
#
constructor: (list)->
if not list?
@_list = []
else if list.constructor is Array
@_list = list
else
throw new Error "Y.List expects an Array as a parameter"
_name: "List"
_getModel: (types, ops)->
if not @_model?
@_model = new ops.ListManager(@).execute()
@insert 0, @_list
delete @_list
@_model
_setModel: (@_model)->
delete @_list
val: ()->
@_model.val.apply @_model, arguments
observe: ()->
@_model.observe.apply @_model, arguments
@
unobserve: ()->
@_model.unobserve.apply @_model, arguments
@
#
# Inserts a Array into the list.
#
# @return {ListManager Type} This String object.
#
insert: (position, content)->
if typeof position isnt "number"
throw new Error "Y.List.insert expects a Number as the first parameter!"
@_model.insert position, content
@
delete: (position, length)->
@_model.delete position, length
@
if window?
if window.Y?
window.Y.List = YList
else
throw new Error "You must first import Y!"
if module?
module.exports = YList
+6
View File
@@ -24,6 +24,11 @@ class YObject
observe: (f)->
@_model.observe f
@
unobserve: (f)->
@_model.unobserve f
@
#
# @overload val()
@@ -57,6 +62,7 @@ class YObject
delete: (name)->
@_model.delete(name)
@
if window?
if window.Y?
+1 -2
View File
@@ -1,6 +1,5 @@
#
# Handles a String-like data structures with support for insert/delete at a word-position.
# @note Currently, only Text is supported!
#
class YText
@@ -59,7 +58,7 @@ class YText
if content.constructor isnt String
throw new Error "Y.String.insert expects a String as the second parameter!"
if typeof position isnt "number"
throw new Error "Y.String.insert expects a Number as the second parameter!"
throw new Error "Y.String.insert expects a Number as the first parameter!"
if content.length > 0
ith = @_model.getOperationByPosition position
# the (i-1)th character. e.g. "abc" the 1th character is "a"
-1
View File
@@ -37,4 +37,3 @@ if window?
window.Y = createY
createY.Object = require "./Types/Object"
createY.Text = require "./Types/Text"
+11 -5
View File
@@ -9,6 +9,8 @@ chai.use(sinonChai)
Connector = require "../../y-test/lib/y-test.coffee"
Y = require "../lib/y.coffee"
Y.Text = require "../lib/Types/Text"
Y.List = require "../lib/Types/List"
compare = (o1, o2)->
if o1._name? and o1._name isnt o2._name
@@ -24,6 +26,10 @@ compare = (o1, o2)->
Test = require "./TestSuite"
class JsonTest extends Test
constructor: (suffix)->
super suffix, Y
makeNewUser: (userId)->
conn = new Connector userId
super new Y conn
@@ -148,19 +154,19 @@ describe "JsonFramework", ->
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.users[0].val('l', new Y.List([1,2,3]))
@yTest.users[1].val('l', new Y.List([4,5,6]))
@yTest.compareAll()
@yTest.users[2].val('l').insert(0,'A')
w = @yTest.users[1].val('l').insert(0,'B', "mutable").val(0)
w = @yTest.users[1].val('l').insert(0,new Y.Text('B')).val(0)
w.insert 1, "C"
expect(w.val()).to.equal("BC")
@yTest.compareAll()
it "handles immutables and primitive data types", ->
@yTest.getSomeUser().val('string', new Y.Text("text"))
@yTest.getSomeUser().val('string', "text")
@yTest.getSomeUser().val('number', 4)
@yTest.getSomeUser().val('object', {q:"rr"})
@yTest.getSomeUser().val('object', new Y.Object({q:"rr"}))
@yTest.getSomeUser().val('null', null)
@yTest.compareAll()
expect(@yTest.getSomeUser().val('string')).to.equal "text"
+12 -4
View File
@@ -7,13 +7,14 @@ _ = require("underscore")
chai.use(sinonChai)
Connector = require "../../y-test/lib/y-test.coffee"
Y = require "../lib/y"
Y = null
module.exports = class Test
constructor: (@name_suffix = "")->
constructor: (@name_suffix = "", Yjs)->
Y = Yjs
@number_of_test_cases_multiplier = 1
@repeat_this = 1 * @number_of_test_cases_multiplier
@doSomething_amount = 1230 * @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
@@ -94,13 +95,20 @@ module.exports = class Test
throw new Error "implement me!"
compare: (o1, o2)->
if o1._name? and o1._name isnt o2._name
if o1 is o2
true
else 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.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!"
for o,i in o1
@compare o, o2[i]
else if o1 isnt o2
throw new Error "different values"
+5
View File
@@ -8,11 +8,16 @@ _ = 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)->
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -2
View File
File diff suppressed because one or more lines are too long