From 3a6cf0e6d4e0c3b2bdff16658c25e71bd50ad034 Mon Sep 17 00:00:00 2001 From: asiva Date: Mon, 26 Oct 2020 21:13:36 +0000 Subject: [PATCH] [VM Unit Tests] Fix some of the VM unit tests to account for new null safety semantics - Some tests were using a 'main' with a signature that does not match the new spec,changed these tests to invoke 'testMain' instead of 'main' - deleted test case for a factory method that returns a null (reports as a compilation error now) - Fixed some of the isolate_reload tests to not crash - Turn on non-nullable experiment flag by default for unit tests - Added a unit test for creation of a non nullable list of strings using the Dart C API. Change-Id: I2c345aaabdc29e9222c1d451f2ef43ba5cdb3686 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/167821 Commit-Queue: Siva Annamalai Reviewed-by: Ben Konyi --- .../write_barrier_elimination_test.cc | 2 +- runtime/vm/dart_api_impl_test.cc | 27 +++++++------ runtime/vm/isolate_reload_test.cc | 39 +++---------------- 3 files changed, 20 insertions(+), 48 deletions(-) diff --git a/runtime/vm/compiler/write_barrier_elimination_test.cc b/runtime/vm/compiler/write_barrier_elimination_test.cc index a45ece75e97..f483b05684c 100644 --- a/runtime/vm/compiler/write_barrier_elimination_test.cc +++ b/runtime/vm/compiler/write_barrier_elimination_test.cc @@ -215,7 +215,7 @@ ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_Regress43786) { final root = List.filled(128, null); List last = root; for (int i = 0; i < 10 * 1024; ++i) { - final nc = List(128); + final nc = List.filled(128, null); last[0] = nc; last = nc; } diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc index 0046562f330..cf7853fe4cf 100644 --- a/runtime/vm/dart_api_impl_test.cc +++ b/runtime/vm/dart_api_impl_test.cc @@ -1966,7 +1966,7 @@ TEST_CASE(DartAPI_TypedDataViewListGetAsBytes) { const char* kScriptChars = "import 'dart:typed_data';\n" - "List main(int size) {\n" + "List testMain(int size) {\n" " var a = new Int8List(size);\n" " var view = new Int8List.view(a.buffer, 0, size);\n" " return view;\n" @@ -1977,7 +1977,7 @@ TEST_CASE(DartAPI_TypedDataViewListGetAsBytes) { // Test with a typed data view object. Dart_Handle dart_args[1]; dart_args[0] = Dart_NewInteger(kSize); - Dart_Handle view_obj = Dart_Invoke(lib, NewString("main"), 1, dart_args); + Dart_Handle view_obj = Dart_Invoke(lib, NewString("testMain"), 1, dart_args); EXPECT_VALID(view_obj); for (intptr_t i = 0; i < kSize; ++i) { EXPECT_VALID(Dart_ListSetAt(view_obj, i, Dart_NewInteger(i & 0xff))); @@ -1998,7 +1998,7 @@ TEST_CASE(DartAPI_TypedDataViewListIsTypedData) { const char* kScriptChars = "import 'dart:typed_data';\n" - "List main(int size) {\n" + "List testMain(int size) {\n" " var a = new Int8List(size);\n" " var view = new Int8List.view(a.buffer, 0, size);\n" " return view;\n" @@ -2009,7 +2009,7 @@ TEST_CASE(DartAPI_TypedDataViewListIsTypedData) { // Create a typed data view object. Dart_Handle dart_args[1]; dart_args[0] = Dart_NewInteger(kSize); - Dart_Handle view_obj = Dart_Invoke(lib, NewString("main"), 1, dart_args); + Dart_Handle view_obj = Dart_Invoke(lib, NewString("testMain"), 1, dart_args); EXPECT_VALID(view_obj); // Test that the API considers it a TypedData object. EXPECT(Dart_IsTypedData(view_obj)); @@ -5524,9 +5524,6 @@ TEST_CASE(DartAPI_New) { " factory MyClass.multiply(value) {\n" " return new MyClass.named(value * 100);\n" " }\n" - " factory MyClass.nullo() {\n" - " return null;\n" - " }\n" " var foo;\n" "}\n" "\n" @@ -5687,11 +5684,6 @@ TEST_CASE(DartAPI_New) { EXPECT_VALID(Dart_IntegerToInt64(foo, &int_value)); EXPECT_EQ(1100, int_value); - // Invoke a factory constructor which returns null. - result = Dart_New(type, NewString("nullo"), 0, NULL); - EXPECT_VALID(result); - EXPECT(Dart_IsNull(result)); - // Pass an error class object. Error is passed through. result = Dart_New(Dart_NewApiError("myerror"), NewString("named"), 1, args); EXPECT_ERROR(result, "myerror"); @@ -5967,6 +5959,13 @@ TEST_CASE(DartAPI_NewListOfTypeFilled) { // Null is always valid as the fill argument if we're creating an empty list. EXPECT_VALID(Dart_NewListOfTypeFilled(zxhandle_type, Dart_Null(), 0)); + + // Test creation of a non nullable list of strings. + Dart_Handle corelib = Dart_LookupLibrary(NewString("dart:core")); + EXPECT_VALID(corelib); + Dart_Handle string_type = + Dart_GetNonNullableType(corelib, NewString("String"), 0, NULL); + EXPECT_VALID(Dart_NewListOfTypeFilled(string_type, Dart_EmptyString(), 2)); } static Dart_Handle PrivateLibName(Dart_Handle lib, const char* str) { @@ -8626,7 +8625,7 @@ TEST_CASE(DartAPI_CollectTwoOldSpacePeers) { TEST_CASE(DartAPI_ExternalStringIndexOf) { const char* kScriptChars = - "main(String pattern) {\n" + "testMain(String pattern) {\n" " var str = 'Hello World';\n" " return str.indexOf(pattern);\n" "}\n"; @@ -8641,7 +8640,7 @@ TEST_CASE(DartAPI_ExternalStringIndexOf) { Dart_Handle dart_args[1]; dart_args[0] = ext8; - Dart_Handle result = Dart_Invoke(lib, NewString("main"), 1, dart_args); + Dart_Handle result = Dart_Invoke(lib, NewString("testMain"), 1, dart_args); int64_t value = 0; result = Dart_IntegerToInt64(result, &value); EXPECT_VALID(result); diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc index eac771f426f..c373d3d3b91 100644 --- a/runtime/vm/isolate_reload_test.cc +++ b/runtime/vm/isolate_reload_test.cc @@ -1096,12 +1096,12 @@ TEST_CASE(IsolateReload_LibraryLookup) { const char* kScript = "main() {\n" - " return importedFunc();\n" + " return 'b';\n" "}\n"; Dart_Handle result; Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); EXPECT_VALID(lib); - EXPECT_ERROR(SimpleInvokeError(lib, "main"), "importedFunc"); + EXPECT_STREQ("b", SimpleInvokeStr(lib, "main")); // Fail to find 'test:lib1' in the isolate. result = Dart_LookupLibrary(NewString("test:lib1")); @@ -1122,7 +1122,7 @@ TEST_CASE(IsolateReload_LibraryLookup) { result = Dart_LookupLibrary(NewString("test:lib1")); EXPECT(Dart_IsLibrary(result)); - // Reload and remove 'dart:math' from isolate. + // Reload and remove 'test:lib1' from isolate. lib = TestCase::ReloadTestScript(kScript); EXPECT_VALID(lib); @@ -1362,22 +1362,15 @@ TEST_CASE(IsolateReload_PendingUnqualifiedCall_InstanceToStatic) { "}\n"; EXPECT_VALID(TestCase::SetReloadTestScript(kReloadScript)); - const char* expected = "static"; const char* result = SimpleInvokeStr(lib, "main"); EXPECT_NOTNULL(result); - // Bail out if we've already failed so we don't crash in StringEquals. if (result == NULL) { return; } EXPECT_STREQ(expected, result); - // Bail out if we've already failed so we don't crash in the tag handler. - if (strcmp(expected, result) != 0) { - return; - } - lib = Dart_RootLibrary(); EXPECT_NON_NULL(lib); EXPECT_STREQ(expected, SimpleInvokeStr(lib, "main")); @@ -1390,7 +1383,6 @@ TEST_CASE(IsolateReload_PendingConstructorCall_AbstractToConcrete) { "class C {\n" " test() {\n" " reloadTest();\n" - " return new Foo();\n" " }\n" "}\n" "main() {\n" @@ -1480,19 +1472,7 @@ TEST_CASE(IsolateReload_PendingConstructorCall_ConcreteToAbstract) { "}\n"; EXPECT_VALID(TestCase::SetReloadTestScript(kReloadScript)); - - const char* expected = "exception"; - const char* result = SimpleInvokeStr(lib, "main"); - EXPECT_STREQ(expected, result); - - // Bail out if we've already failed so we don't crash in the tag handler. - if ((result == NULL) || (strcmp(expected, result) != 0)) { - return; - } - - lib = Dart_RootLibrary(); - EXPECT_NON_NULL(lib); - EXPECT_STREQ(expected, SimpleInvokeStr(lib, "main")); + EXPECT_ERROR(SimpleInvokeError(lib, "main"), "is abstract"); } TEST_CASE(IsolateReload_PendingStaticCall_DefinedToNSM) { @@ -1533,7 +1513,6 @@ TEST_CASE(IsolateReload_PendingStaticCall_DefinedToNSM) { "}\n"; EXPECT_VALID(TestCase::SetReloadTestScript(kReloadScript)); - const char* expected = "exception"; const char* result = SimpleInvokeStr(lib, "main"); EXPECT_NOTNULL(result); @@ -1544,12 +1523,6 @@ TEST_CASE(IsolateReload_PendingStaticCall_DefinedToNSM) { } EXPECT_STREQ(expected, result); - // Bail out if we've already failed so we don't crash in the tag handler. - if (strcmp(expected, result) != 0) { - return; - } - - EXPECT_STREQ(expected, result); lib = Dart_RootLibrary(); EXPECT_NON_NULL(lib); EXPECT_STREQ(expected, SimpleInvokeStr(lib, "main")); @@ -1596,12 +1569,12 @@ TEST_CASE(IsolateReload_PendingStaticCall_NSMToDefined) { const char* expected = "static"; const char* result = SimpleInvokeStr(lib, "main"); - EXPECT_STREQ(expected, result); // Bail out if we've already failed so we don't crash in the tag handler. - if ((result == NULL) || (strcmp(expected, result) != 0)) { + if (result == NULL) { return; } + EXPECT_STREQ(expected, result); lib = Dart_RootLibrary(); EXPECT_NON_NULL(lib);