Skip to content

Commit 8e16962

Browse files
committed
writer (wip)
1 parent 517024b commit 8e16962

File tree

2 files changed

+91
-8
lines changed

2 files changed

+91
-8
lines changed

src/dataWriter.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,20 @@ typesTable[DataTypes.struct] = function (value, scheme) {
102102
};
103103

104104
typesTable[DataTypes.list] = function (value, scheme) {
105-
if (Object.prototype.toString.call(value) !== '[object Array]') {
106-
throw Error('Value is not array.')
105+
if (!Array.isArray(value)) {
106+
throw Error('Value is not array.');
107107
}
108108

109109
var res = [];
110110
var lenBuf = new Buffer(2);
111111
var length = value.length;
112112
lenBuf.writeUInt16BE(length,0);
113113
res.push(lenBuf);
114+
114115
for(var i = 0; i < length; i++) {
115116
res.push(structureWriter(value[i], scheme));
116117
}
118+
117119
return Buffer.concat(res);
118120
};
119121

@@ -122,12 +124,16 @@ var structureWriter = function (object, scheme) {
122124
if(typeof scheme === 'number') {
123125
res.push(typesTable[scheme](object));
124126
} else {
125-
for (var el in scheme) {
126-
var s = scheme[el];
127-
if (typeof s === 'number') {
128-
res.push(typesTable[s](object[el]));
129-
} else {
130-
res.push(typesTable[s.type](object[el], s.scheme));
127+
if(Array.isArray(scheme)) {
128+
console.log('bingo')
129+
} else {
130+
for (var el in scheme) {
131+
var s = scheme[el];
132+
if (typeof s === 'number') {
133+
res.push(typesTable[s](object[el]));
134+
} else {
135+
res.push(typesTable[s.type](object[el], s.scheme));
136+
}
131137
}
132138
}
133139
}

test/tests.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,70 @@ suite("DataStruct", function(){
150150

151151
};
152152

153+
var dataBundleExtend = {
154+
nested: {
155+
object: {
156+
nested: {
157+
nested2: {
158+
nested3: {
159+
nested4: {
160+
nested5: 42
161+
}
162+
}
163+
}
164+
}
165+
},
166+
167+
scheme: {
168+
nested: {
169+
type: DataTypes.struct,
170+
scheme: {
171+
nested2: {
172+
type: DataTypes.struct,
173+
scheme: {
174+
nested3: {
175+
type: DataTypes.struct,
176+
scheme: {
177+
nested4: {
178+
type: DataTypes.struct,
179+
scheme: {
180+
nested5: {
181+
type: DataTypes.struct,
182+
scheme: DataTypes.uint8
183+
}
184+
}
185+
}
186+
}
187+
}
188+
}
189+
}
190+
}
191+
}
192+
}
193+
},
194+
195+
'list of list': {
196+
object: {
197+
list: [
198+
[90,10,101],
199+
[20,30,400],
200+
[100,110,1]
201+
]
202+
},
203+
204+
scheme: {
205+
list: {
206+
type: DataTypes.list,
207+
scheme: {
208+
type: DataTypes.list,
209+
scheme: DataTypes.int16
210+
}
211+
}
212+
}
213+
}
214+
215+
};
216+
153217
suite("Buffer to Object convert", function(){
154218
for(var suite in dataBundle) {
155219
var data = dataBundle[suite];
@@ -173,4 +237,17 @@ suite("DataStruct", function(){
173237
})(suite, data);
174238
}
175239
});
240+
241+
suite("Object to Buffer to Object convert", function() {
242+
for(var suite in dataBundleExtend) {
243+
var data = dataBundleExtend[suite];
244+
(function(suite, data) {
245+
test("should convert to buffer and read same for '" + suite + "' suite", function () {
246+
var buf = DataWriter(data.object, data.scheme);
247+
var obj = DataReader(buf, data.scheme);
248+
assert.deepEqual(obj, data.object);
249+
});
250+
})(suite, data);
251+
}
252+
});
176253
});

0 commit comments

Comments
 (0)