@@ -2262,6 +2262,122 @@ TEST_CASE(DartAPI_MapAccess) {
22622262 EXPECT (Dart_IsError (Dart_MapKeys (a)));
22632263}
22642264
2265+ TEST_CASE (DartAPI_MapCreate) {
2266+ const char * kScriptChars =
2267+ R"(
2268+ @pragma('vm:entry-point', 'call')
2269+ String testMain(Map<String, Object?> mp) {
2270+ List result = [];
2271+ String dump = "";
2272+ // Test no modifications
2273+ for (var k in mp.keys) {
2274+ dump += "|" + k + ":" + mp[k].toString() + "|";
2275+ }
2276+ result.add(dump);
2277+
2278+ dump = "";
2279+ // Test with modifications
2280+ mp["f"] = 42;
2281+ for (var k in mp.keys) {
2282+ dump += "|" + k + ":" + mp[k].toString() + "|";
2283+ }
2284+ result.add(dump);
2285+ return result.toString();
2286+ })" ;
2287+ // Create a test library and Load up a test script in it.
2288+ Dart_Handle lib = TestCase::LoadTestScript (kScriptChars , nullptr );
2289+
2290+ Dart_Handle core_lib = Dart_LookupLibrary (NewString (" dart:core" ));
2291+ EXPECT_VALID (core_lib);
2292+
2293+ Dart_Handle key_type =
2294+ Dart_GetNonNullableType (core_lib, NewString (" String" ), 0 , nullptr );
2295+ EXPECT_VALID (key_type);
2296+
2297+ Dart_Handle value_type =
2298+ Dart_GetNullableType (core_lib, NewString (" Object" ), 0 , nullptr );
2299+ EXPECT_VALID (value_type);
2300+
2301+ { // Test empty
2302+ // Init list of keys
2303+ Dart_Handle keys = Dart_NewList (0 );
2304+ EXPECT_VALID (keys);
2305+
2306+ // Init list of values
2307+ Dart_Handle values = Dart_NewList (0 );
2308+ EXPECT_VALID (values);
2309+
2310+ Dart_Handle dart_map = Dart_NewMap (key_type, keys, value_type, values);
2311+
2312+ // Invoke a function which returns an object of type String.
2313+ Dart_Handle result = Dart_Invoke (lib, NewString (" testMain" ), 1 , &dart_map);
2314+ EXPECT_VALID (result);
2315+ const char * encoded_str = nullptr ;
2316+ EXPECT_VALID (Dart_StringToCString (result, &encoded_str));
2317+ EXPECT_STREQ (" [, |f:42|]" , encoded_str);
2318+ }
2319+ { // Test 5 elements
2320+ // Init list of keys
2321+ Dart_Handle keys = Dart_NewList (5 );
2322+ EXPECT_VALID (keys);
2323+
2324+ // Init list of values
2325+ Dart_Handle values = Dart_NewList (5 );
2326+ EXPECT_VALID (values);
2327+
2328+ // Fill map.
2329+ EXPECT_VALID (Dart_ListSetAt (keys, 0 , NewString (" a" )));
2330+ EXPECT_VALID (Dart_ListSetAt (values, 0 , Dart_NewInteger (5 )));
2331+ EXPECT_VALID (Dart_ListSetAt (keys, 1 , NewString (" b" )));
2332+ EXPECT_VALID (Dart_ListSetAt (values, 1 , Dart_NewInteger (4 )));
2333+ EXPECT_VALID (Dart_ListSetAt (keys, 2 , NewString (" c" )));
2334+ EXPECT_VALID (Dart_ListSetAt (values, 2 , NewString (" oO" )));
2335+ EXPECT_VALID (Dart_ListSetAt (keys, 3 , NewString (" d" )));
2336+ EXPECT_VALID (Dart_ListSetAt (values, 3 , Dart_NewInteger (2 )));
2337+ EXPECT_VALID (Dart_ListSetAt (keys, 4 , NewString (" e" )));
2338+ EXPECT_VALID (Dart_ListSetAt (values, 4 , Dart_Null ()));
2339+ Dart_Handle dart_map = Dart_NewMap (key_type, keys, value_type, values);
2340+
2341+ // Invoke a function which returns an object of type String.
2342+ Dart_Handle result = Dart_Invoke (lib, NewString (" testMain" ), 1 , &dart_map);
2343+ EXPECT_VALID (result);
2344+ const char * encoded_str = nullptr ;
2345+ EXPECT_VALID (Dart_StringToCString (result, &encoded_str));
2346+ EXPECT_STREQ (
2347+ " [|a:5||b:4||c:oO||d:2||e:null|, "
2348+ " |a:5||b:4||c:oO||d:2||e:null||f:42|]" ,
2349+ encoded_str);
2350+ }
2351+ { // Test 10 elements
2352+ static constexpr int kElementCount = 10 ;
2353+ // Init list of keys
2354+ Dart_Handle keys = Dart_NewList (kElementCount );
2355+ EXPECT_VALID (keys);
2356+
2357+ // Init list of values
2358+ Dart_Handle values = Dart_NewList (kElementCount );
2359+ EXPECT_VALID (values);
2360+
2361+ // Fill map.
2362+ for (int i = 0 ; i < kElementCount ; ++i) {
2363+ const char key[2 ] = {static_cast <char >(' a' + i), ' \0 ' };
2364+ EXPECT_VALID (Dart_ListSetAt (keys, i, NewString (key)));
2365+ EXPECT_VALID (Dart_ListSetAt (values, i, Dart_NewInteger (i)));
2366+ }
2367+ Dart_Handle dart_map = Dart_NewMap (key_type, keys, value_type, values);
2368+
2369+ // Invoke a function which returns an object of type String.
2370+ Dart_Handle result = Dart_Invoke (lib, NewString (" testMain" ), 1 , &dart_map);
2371+ EXPECT_VALID (result);
2372+ const char * encoded_str = nullptr ;
2373+ EXPECT_VALID (Dart_StringToCString (result, &encoded_str));
2374+ EXPECT_STREQ (
2375+ " [|a:0||b:1||c:2||d:3||e:4||f:5||g:6||h:7||i:8||j:9|, "
2376+ " |a:0||b:1||c:2||d:3||e:4||f:42||g:6||h:7||i:8||j:9|]" ,
2377+ encoded_str);
2378+ }
2379+ }
2380+
22652381TEST_CASE (DartAPI_IsFuture) {
22662382 const char * kScriptChars =
22672383 " import 'dart:async';"
0 commit comments