summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/ctypes/conversion-struct.js
blob: f5e43ffa563b1c3dd03dd609a21421e85649a8e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 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();