| Index: runtime/vm/object_test.cc
|
| ===================================================================
|
| --- runtime/vm/object_test.cc (revision 45223)
|
| +++ runtime/vm/object_test.cc (working copy)
|
| @@ -1951,15 +1951,13 @@
|
| }
|
|
|
|
|
| -TEST_CASE(ArrayLength) {
|
| - const intptr_t kLength = Array::kMaxElements + 1;
|
| - ASSERT(kLength >= 0);
|
| +static void TestIllegalArrayLength(intptr_t length) {
|
| char buffer[1024];
|
| OS::SNPrint(buffer, sizeof(buffer),
|
| "main() {\n"
|
| " new List(%" Pd ");\n"
|
| "}\n",
|
| - kLength);
|
| + length);
|
| Dart_Handle lib = TestCase::LoadTestScript(buffer, NULL);
|
| EXPECT_VALID(lib);
|
| Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
|
| @@ -1967,11 +1965,41 @@
|
| "Unhandled exception:\n"
|
| "Invalid argument(s): Length (%" Pd ") must be an integer "
|
| "in the range [0..%" Pd "].",
|
| - kLength, Array::kMaxElements);
|
| + length, Array::kMaxElements);
|
| EXPECT_ERROR(result, buffer);
|
| }
|
|
|
|
|
| +TEST_CASE(ArrayLengthNegativeOne) { TestIllegalArrayLength(-1); }
|
| +TEST_CASE(ArrayLengthSmiMin) { TestIllegalArrayLength(kSmiMin); }
|
| +TEST_CASE(ArrayLengthOneTooMany) {
|
| + const intptr_t kOneTooMany = Array::kMaxElements + 1;
|
| + ASSERT(kOneTooMany >= 0);
|
| + TestIllegalArrayLength(kOneTooMany);
|
| +}
|
| +
|
| +
|
| +TEST_CASE(ArrayLengthMaxElements) {
|
| + char buffer[1024];
|
| + OS::SNPrint(buffer, sizeof(buffer),
|
| + "main() {\n"
|
| + " return new List(%" Pd ");\n"
|
| + "}\n",
|
| + Array::kMaxElements);
|
| + Dart_Handle lib = TestCase::LoadTestScript(buffer, NULL);
|
| + EXPECT_VALID(lib);
|
| + Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
|
| + if (Dart_IsError(result)) {
|
| + EXPECT_ERROR(result, "Out of Memory");
|
| + } else {
|
| + const intptr_t kExpected = Array::kMaxElements;
|
| + intptr_t actual = 0;
|
| + EXPECT_VALID(Dart_ListLength(result, &actual));
|
| + EXPECT_EQ(kExpected, actual);
|
| + }
|
| +}
|
| +
|
| +
|
| TEST_CASE(StringCodePointIterator) {
|
| const String& str0 = String::Handle(String::New(""));
|
| String::CodePointIterator it0(str0);
|
|
|