37 lines
1.9 KiB
JavaScript
37 lines
1.9 KiB
JavaScript
// Type conversion error should report its type.
|
|
|
|
load(libdir + 'asserts.js');
|
|
|
|
function test() {
|
|
let test_struct = ctypes.StructType("test_struct", [{ "x": ctypes.int32_t },
|
|
{ "bar": ctypes.int32_t }]);
|
|
|
|
// constructor
|
|
assertTypeErrorMessage(() => { new test_struct("foo"); },
|
|
"can't convert the string \"foo\" to the type test_struct");
|
|
assertTypeErrorMessage(() => { new test_struct("foo", "x"); },
|
|
"can't convert the string \"foo\" to the 'x' field (int32_t) of test_struct");
|
|
assertTypeErrorMessage(() => { new test_struct({ "x": "foo", "bar": 1 }); },
|
|
"can't convert the string \"foo\" to the 'x' field (int32_t) of test_struct");
|
|
assertTypeErrorMessage(() => { new test_struct({ 0: 1, "bar": 1 }); },
|
|
"property name the number 0 of the object ({0:1, bar:1}) is not a string");
|
|
|
|
// field setter
|
|
let struct_val = test_struct();
|
|
assertTypeErrorMessage(() => { struct_val.x = "foo"; },
|
|
"can't convert the string \"foo\" to the 'x' field (int32_t) of test_struct");
|
|
assertTypeErrorMessage(() => { struct_val.bar = "foo"; },
|
|
"can't convert the string \"foo\" to the 'bar' field (int32_t) of test_struct");
|
|
|
|
// value setter
|
|
assertTypeErrorMessage(() => { struct_val.value = { "x": "foo" }; },
|
|
"property count of the object ({x:\"foo\"}) does not match to field count of the type test_struct (expected 2, got 1)");
|
|
assertTypeErrorMessage(() => { struct_val.value = { "x": "foo", "bar": 1 }; },
|
|
"can't convert the string \"foo\" to the 'x' field (int32_t) of test_struct");
|
|
assertTypeErrorMessage(() => { struct_val.value = "foo"; },
|
|
"can't convert the string \"foo\" to the type test_struct");
|
|
}
|
|
|
|
if (typeof ctypes === "object")
|
|
test();
|