| Index: runtime/vm/dart_api_impl_test.cc
|
| diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
|
| index 00c847f73bf95d95a72287b23a68f4d7029cdff9..53513f9dc50d5547ecb57eaa140c40dce9d3dfd8 100644
|
| --- a/runtime/vm/dart_api_impl_test.cc
|
| +++ b/runtime/vm/dart_api_impl_test.cc
|
| @@ -1285,6 +1285,98 @@ TEST_CASE(ListAccess) {
|
| }
|
|
|
|
|
| +TEST_CASE(MapAccess) {
|
| + const char* kScriptChars =
|
| + "Map testMain() {"
|
| + " return {"
|
| + " 'a' : 1,"
|
| + " 'b' : null,"
|
| + " };"
|
| + "}";
|
| + Dart_Handle result;
|
| +
|
| + // Create a test library and Load up a test script in it.
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
|
| +
|
| + // Invoke a function which returns an object of type Map.
|
| + result = Dart_Invoke(lib, NewString("testMain"), 0, NULL);
|
| + EXPECT_VALID(result);
|
| +
|
| + // First ensure that the returned object is a map.
|
| + Dart_Handle map = result;
|
| + Dart_Handle a = NewString("a");
|
| + Dart_Handle b = NewString("b");
|
| + Dart_Handle c = NewString("c");
|
| +
|
| + EXPECT(Dart_IsMap(map));
|
| + EXPECT(!Dart_IsMap(a));
|
| +
|
| + // Access values in the map.
|
| + int64_t value;
|
| + result = Dart_MapGetAt(map, a);
|
| + EXPECT_VALID(result);
|
| + result = Dart_IntegerToInt64(result, &value);
|
| + EXPECT_VALID(result);
|
| + EXPECT_EQ(value, 1);
|
| +
|
| + result = Dart_MapGetAt(map, b);
|
| + EXPECT(Dart_IsNull(result));
|
| +
|
| + result = Dart_MapGetAt(map, c);
|
| + EXPECT(Dart_IsNull(result));
|
| +
|
| + EXPECT(Dart_IsError(Dart_MapGetAt(a, a)));
|
| +
|
| + // Test for presence of keys.
|
| + bool contains = false;
|
| + result = Dart_MapContainsKey(map, a);
|
| + EXPECT_VALID(result);
|
| + result = Dart_BooleanValue(result, &contains);
|
| + EXPECT_VALID(result);
|
| + EXPECT(contains);
|
| +
|
| + contains = false;
|
| + result = Dart_MapContainsKey(map, NewString("b"));
|
| + EXPECT_VALID(result);
|
| + result = Dart_BooleanValue(result, &contains);
|
| + EXPECT_VALID(result);
|
| + EXPECT(contains);
|
| +
|
| + contains = true;
|
| + result = Dart_MapContainsKey(map, NewString("c"));
|
| + EXPECT_VALID(result);
|
| + result = Dart_BooleanValue(result, &contains);
|
| + EXPECT_VALID(result);
|
| + EXPECT(!contains);
|
| +
|
| + EXPECT(Dart_IsError(Dart_MapContainsKey(a, a)));
|
| +
|
| + // Enumerate keys. (Note literal maps guarantee key order.)
|
| + Dart_Handle keys = Dart_MapKeys(map);
|
| + EXPECT_VALID(keys);
|
| +
|
| + intptr_t len = 0;
|
| + bool equals;
|
| + result = Dart_ListLength(keys, &len);
|
| + EXPECT_VALID(result);
|
| + EXPECT_EQ(2, len);
|
| +
|
| + result = Dart_ListGetAt(keys, 0);
|
| + EXPECT(Dart_IsString(result));
|
| + equals = false;
|
| + EXPECT_VALID(Dart_ObjectEquals(result, a, &equals));
|
| + EXPECT(equals);
|
| +
|
| + result = Dart_ListGetAt(keys, 1);
|
| + EXPECT(Dart_IsString(result));
|
| + equals = false;
|
| + EXPECT_VALID(Dart_ObjectEquals(result, b, &equals));
|
| + EXPECT(equals);
|
| +
|
| + EXPECT(Dart_IsError(Dart_MapKeys(a)));
|
| +}
|
| +
|
| +
|
| TEST_CASE(TypedDataViewListGetAsBytes) {
|
| const int kSize = 1000;
|
|
|
|
|