mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
5.9 KiB
207 lines
5.9 KiB
/*
|
|
* Buffer constructor tests.
|
|
*/
|
|
|
|
/*===
|
|
plain fixed 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
plain dynamic 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
plain fixed 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
plain fixed 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
object fixed 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
object dynamic 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
object fixed 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
object fixed 10 bytes: 0 0 0 0 0 0 0 0 0 0
|
|
plain fixed 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
plain dynamic 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
plain fixed 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
plain fixed 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
object fixed 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
object dynamic 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
object fixed 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
object fixed 9 bytes: 102 111 111 98 97 114 225 136 180
|
|
plain fixed 3 bytes: 102 111 111
|
|
plain fixed 3 bytes: 102 111 111
|
|
plain fixed 3 bytes: 102 111 111
|
|
plain fixed 3 bytes: 102 111 111
|
|
buffer is the same: true
|
|
object fixed 3 bytes: 102 111 111
|
|
object fixed 3 bytes: 102 111 111
|
|
object fixed 3 bytes: 102 111 111
|
|
object fixed 3 bytes: 102 111 111
|
|
buffer is the same: true
|
|
plain dynamic 3 bytes: 98 97 114
|
|
plain dynamic 3 bytes: 98 97 114
|
|
plain dynamic 3 bytes: 98 97 114
|
|
plain dynamic 3 bytes: 98 97 114
|
|
buffer is the same: true
|
|
object dynamic 3 bytes: 98 97 114
|
|
object dynamic 3 bytes: 98 97 114
|
|
object dynamic 3 bytes: 98 97 114
|
|
object dynamic 3 bytes: 98 97 114
|
|
buffer is the same: true
|
|
plain fixed 4 bytes: 113 117 117 120
|
|
buffer is the same: true
|
|
object fixed 4 bytes: 113 117 117 120
|
|
buffer is the same: true
|
|
object is the same: false
|
|
undefined TypeError
|
|
undefined TypeError
|
|
null TypeError
|
|
null TypeError
|
|
boolean TypeError
|
|
boolean TypeError
|
|
boolean TypeError
|
|
boolean TypeError
|
|
object TypeError
|
|
object TypeError
|
|
object TypeError
|
|
object TypeError
|
|
function TypeError
|
|
function TypeError
|
|
pointer TypeError
|
|
pointer TypeError
|
|
===*/
|
|
|
|
function isFixed(buf) {
|
|
/* Currently this is hard to see from Ecmascript side, use
|
|
* Duktape.info().
|
|
*/
|
|
if (typeof buf !== 'buffer') {
|
|
throw new Error('not a buffer');
|
|
}
|
|
|
|
var t = Duktape.info(buf);
|
|
if (t[4] !== undefined) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function dump(buf) {
|
|
var is_plain;
|
|
if (typeof buf === 'buffer') {
|
|
is_plain = true;
|
|
} else if (buf instanceof Duktape.Buffer) {
|
|
is_plain = false;
|
|
buf = buf.valueOf();
|
|
} else {
|
|
throw new Error('not a buffer');
|
|
}
|
|
|
|
print(is_plain ? "plain" : "object",
|
|
isFixed(buf) ? 'fixed' : 'dynamic',
|
|
buf.length,
|
|
'bytes:',
|
|
Array.prototype.map.call(buf, function(v) { return String(v); }).join(' '));
|
|
}
|
|
|
|
function test() {
|
|
var b;
|
|
var str = 'foobar\u1234';
|
|
|
|
/* Number argument: creates new buffer of specified size,
|
|
* filled with zeroes by default (this can be disabled with
|
|
* an extra option but is the standard behavior).
|
|
*/
|
|
|
|
dump(Duktape.Buffer(10));
|
|
dump(Duktape.Buffer(10, true));
|
|
dump(Duktape.Buffer(10, false));
|
|
dump(Duktape.Buffer(10, false, 'ignored'));
|
|
|
|
dump(new Duktape.Buffer(10));
|
|
dump(new Duktape.Buffer(10, true));
|
|
dump(new Duktape.Buffer(10, false));
|
|
dump(new Duktape.Buffer(10, false, 'ignored'));
|
|
|
|
/* String argument: create a buffer with bytes from the string
|
|
* internal representation.
|
|
*/
|
|
|
|
dump(Duktape.Buffer(str));
|
|
dump(Duktape.Buffer(str, true));
|
|
dump(Duktape.Buffer(str, false));
|
|
dump(Duktape.Buffer(str, false, 'ignored'));
|
|
|
|
dump(new Duktape.Buffer(str));
|
|
dump(new Duktape.Buffer(str, true));
|
|
dump(new Duktape.Buffer(str, false));
|
|
dump(new Duktape.Buffer(str, false, 'ignored'));
|
|
|
|
/* Plain buffer argument: return as is, no new buffer is created,
|
|
* and the buffer dynamic/fixed nature is not changed.
|
|
*/
|
|
|
|
b = Duktape.Buffer('foo');
|
|
|
|
dump(Duktape.Buffer(b));
|
|
dump(Duktape.Buffer(b, true));
|
|
dump(Duktape.Buffer(b, false));
|
|
dump(Duktape.Buffer(b, false, 'ignored'));
|
|
print('buffer is the same:', (Duktape.Buffer(b)).valueOf() === b);
|
|
|
|
dump(new Duktape.Buffer(b));
|
|
dump(new Duktape.Buffer(b, true));
|
|
dump(new Duktape.Buffer(b, false));
|
|
dump(new Duktape.Buffer(b, false, 'ignored'));
|
|
print('buffer is the same:', (new Duktape.Buffer(b)).valueOf() === b);
|
|
|
|
b = Duktape.Buffer('bar', true);
|
|
|
|
dump(Duktape.Buffer(b));
|
|
dump(Duktape.Buffer(b, true));
|
|
dump(Duktape.Buffer(b, false));
|
|
dump(Duktape.Buffer(b, false, 'ignored'));
|
|
print('buffer is the same:', (Duktape.Buffer(b)).valueOf() === b);
|
|
|
|
dump(new Duktape.Buffer(b));
|
|
dump(new Duktape.Buffer(b, true));
|
|
dump(new Duktape.Buffer(b, false));
|
|
dump(new Duktape.Buffer(b, false, 'ignored'));
|
|
print('buffer is the same:', (new Duktape.Buffer(b)).valueOf() === b);
|
|
|
|
/* Buffer object argument: if called as a plain function, return the
|
|
* plain buffer; if called as a constructor, create a new Buffer object
|
|
* with the same plain value inside. This is the same as String behavior.
|
|
*/
|
|
|
|
b = new Duktape.Buffer('quux');
|
|
|
|
dump(Duktape.Buffer(b));
|
|
print('buffer is the same:', b.valueOf() === Duktape.Buffer(b));
|
|
|
|
dump(new Duktape.Buffer(b));
|
|
print('buffer is the same:', b.valueOf() === new Duktape.Buffer(b).valueOf());
|
|
print('object is the same:', b === new Duktape.Buffer(b));
|
|
|
|
/* Other types: TypeErrors for now. */
|
|
|
|
function catchtest(v) {
|
|
try {
|
|
dump(Duktape.Buffer(v));
|
|
} catch (e) {
|
|
print(v === null ? 'null' : typeof v, e.name);
|
|
}
|
|
|
|
try {
|
|
dump(new Duktape.Buffer(v));
|
|
} catch (e) {
|
|
print(v === null ? 'null' : typeof v, e.name);
|
|
}
|
|
}
|
|
|
|
catchtest(undefined);
|
|
catchtest(null);
|
|
catchtest(true);
|
|
catchtest(false);
|
|
catchtest({ foo: 1, bar:2 });
|
|
catchtest([ 'foo', 'bar' ]);
|
|
catchtest(function () {});
|
|
catchtest(Duktape.Pointer('dummy'));
|
|
}
|
|
|
|
try {
|
|
test();
|
|
} catch (e) {
|
|
print(e.stack || e);
|
|
}
|
|
|