Index: runtime/vm/object_test.cc |
=================================================================== |
--- runtime/vm/object_test.cc (revision 45353) |
+++ runtime/vm/object_test.cc (working copy) |
@@ -2000,6 +2000,60 @@ |
} |
+static void TestIllegalTypedDataLength(const char* class_name, |
+ intptr_t length) { |
+ char buffer[1024]; |
+ OS::SNPrint(buffer, sizeof(buffer), |
+ "import 'dart:typed_data';\n" |
+ "main() {\n" |
+ " new %s(%" Pd ");\n" |
+ "}\n", |
+ class_name, length); |
+ Dart_Handle lib = TestCase::LoadTestScript(buffer, NULL); |
+ EXPECT_VALID(lib); |
+ Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
+ OS::SNPrint(buffer, sizeof(buffer), "%" Pd, length); |
+ EXPECT_ERROR(result, "Invalid argument(s)"); |
+ EXPECT_ERROR(result, buffer); |
+} |
+ |
+ |
+TEST_CASE(Int8ListLengthNegativeOne) { |
+ TestIllegalTypedDataLength("Int8List", -1); |
+} |
+TEST_CASE(Int8ListLengthSmiMin) { |
+ TestIllegalTypedDataLength("Int8List", kSmiMin); |
+} |
+TEST_CASE(Int8ListLengthOneTooMany) { |
+ const intptr_t kOneTooMany = |
+ TypedData::MaxElements(kTypedDataInt8ArrayCid) + 1; |
+ ASSERT(kOneTooMany >= 0); |
+ TestIllegalTypedDataLength("Int8List", kOneTooMany); |
+} |
+ |
+ |
+TEST_CASE(Int8ListLengthMaxElements) { |
+ const intptr_t max_elements = TypedData::MaxElements(kTypedDataInt8ArrayCid); |
+ char buffer[1024]; |
+ OS::SNPrint(buffer, sizeof(buffer), |
+ "import 'dart:typed_data';\n" |
+ "main() {\n" |
+ " return new Int8List(%" Pd ");\n" |
+ "}\n", |
+ max_elements); |
+ 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 { |
+ intptr_t actual = 0; |
+ EXPECT_VALID(Dart_ListLength(result, &actual)); |
+ EXPECT_EQ(max_elements, actual); |
+ } |
+} |
+ |
+ |
TEST_CASE(StringCodePointIterator) { |
const String& str0 = String::Handle(String::New("")); |
String::CodePointIterator it0(str0); |