| 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 fcc4e79cd8cc88cc39f412f13ed1490c827bd007..915646d14570dcd403747122a22a310df7a99914 100644
|
| --- a/runtime/vm/dart_api_impl_test.cc
|
| +++ b/runtime/vm/dart_api_impl_test.cc
|
| @@ -14,6 +14,7 @@
|
| #include "vm/class_finalizer.h"
|
| #include "vm/dart_api_impl.h"
|
| #include "vm/dart_api_state.h"
|
| +#include "vm/dev_fs.h"
|
| #include "vm/lockers.h"
|
| #include "vm/timeline.h"
|
| #include "vm/unit_test.h"
|
| @@ -10085,6 +10086,123 @@ TEST_CASE(Dart_LoadLibraryPatch_Error3) {
|
| EXPECT(Dart_IsError(result));
|
| }
|
|
|
| +
|
| +TEST_CASE(DevFS_UriTest) {
|
| + EXPECT(!Dart_IsDevFSUri(NewString("/")));
|
| + EXPECT(!Dart_IsDevFSUri(NewString("file:///")));
|
| + EXPECT(!Dart_IsDevFSUri(NewString("dart:///")));
|
| + EXPECT(Dart_IsDevFSUri(NewString("dart-devfs://")));
|
| + EXPECT(Dart_IsDevFSUri(NewString("dart-devfs:")));
|
| +}
|
| +
|
| +
|
| +static void PopulateDevFS(const char* fs_name_c) {
|
| + JSONStream js;
|
| + DevFS::Init();
|
| + const String& fs_name = String::Handle(String::New(fs_name_c));
|
| + DevFS::CreateFileSystem(&js, fs_name);
|
| +
|
| + const String& filename0 = String::Handle(String::New("/foobar.txt"));
|
| + const String& filename1 = String::Handle(String::New("/packages/foobar.txt"));
|
| + const String& filename2 = String::Handle(String::New("/f/o/o/bar.txt"));
|
| +
|
| + const String& payload0 = String::Handle(String::New("payload0"));
|
| + const String& payload1 = String::Handle(String::New("payload_1"));
|
| + const String& payload2 = String::Handle(String::New("payload__2"));
|
| +
|
| + DevFS::WriteFile(&js, fs_name, filename0, payload0);
|
| + DevFS::WriteFile(&js, fs_name, filename1, payload1);
|
| + DevFS::WriteFile(&js, fs_name, filename2, payload2);
|
| +}
|
| +
|
| +
|
| +static bool StringsEqual(Dart_Handle a, const char* b) {
|
| + const char* a_c = NULL;
|
| + Dart_Handle result = Dart_StringToCString(a, &a_c);
|
| + if (Dart_IsError(result)) {
|
| + return false;
|
| + }
|
| + return strcmp(a_c, b) == 0;
|
| +}
|
| +
|
| +
|
| +static bool TypedDataEqualsString(Dart_Handle a, const char* b) {
|
| + Dart_TypedData_Type type;
|
| + void* data = NULL;
|
| + intptr_t len = 0;
|
| + Dart_Handle result = Dart_TypedDataAcquireData(a,
|
| + &type,
|
| + &data,
|
| + &len);
|
| + if (Dart_IsError(result)) {
|
| + return false;
|
| + }
|
| +
|
| + intptr_t b_len = strlen(b);
|
| +
|
| + bool success = strncmp(reinterpret_cast<char*>(data), b, b_len) == 0;
|
| +
|
| + result = Dart_TypedDataReleaseData(a);
|
| + EXPECT_VALID(result);
|
| +
|
| + return success;
|
| +}
|
| +
|
| +
|
| +TEST_CASE(DevFS_ReadFileTest) {
|
| + DevFS::Init();
|
| + PopulateDevFS("test");
|
| +
|
| + Dart_Handle uri0 = NewString("dart-devfs://test/foobar.txt");
|
| + Dart_Handle uri1 = NewString("dart-devfs://test/packages/foobar.txt");
|
| + Dart_Handle uri2 = NewString("dart-devfs://test/f/o/o/bar.txt");
|
| +
|
| + Dart_Handle bad_uri0 = NewString("dart-devfs:///foobar.txt");
|
| + Dart_Handle bad_uri1 = NewString("dart-devfs://test1/foobar.txt");
|
| + Dart_Handle bad_uri2 = NewString("dart-devfs://test/foobar2.txt");
|
| +
|
| + Dart_Handle result;
|
| +
|
| + result = Dart_DevFSReadFileAsUTF8String(uri0);
|
| + EXPECT_VALID(result);
|
| + EXPECT(Dart_IsString(result));
|
| + EXPECT(StringsEqual(result, "payload0"));
|
| +
|
| + result = Dart_DevFSReadFileAsUTF8String(uri1);
|
| + EXPECT_VALID(result);
|
| + EXPECT(Dart_IsString(result));
|
| + EXPECT(StringsEqual(result, "payload_1"));
|
| +
|
| + result = Dart_DevFSReadFileAsUTF8String(uri2);
|
| + EXPECT_VALID(result);
|
| + EXPECT(Dart_IsString(result));
|
| + EXPECT(StringsEqual(result, "payload__2"));
|
| +
|
| + result = Dart_DevFSReadFile(uri0);
|
| + EXPECT_VALID(result);
|
| + EXPECT(Dart_IsTypedData(result));
|
| + EXPECT(TypedDataEqualsString(result, "payload0"));
|
| +
|
| + result = Dart_DevFSReadFile(uri1);
|
| + EXPECT_VALID(result);
|
| + EXPECT(Dart_IsTypedData(result));
|
| + EXPECT(TypedDataEqualsString(result, "payload_1"));
|
| +
|
| + result = Dart_DevFSReadFile(uri2);
|
| + EXPECT_VALID(result);
|
| + EXPECT(Dart_IsTypedData(result));
|
| + EXPECT(TypedDataEqualsString(result, "payload__2"));
|
| +
|
| + result = Dart_DevFSReadFileAsUTF8String(bad_uri0);
|
| + EXPECT(Dart_IsError(result));
|
| +
|
| + result = Dart_DevFSReadFileAsUTF8String(bad_uri1);
|
| + EXPECT(Dart_IsError(result));
|
| +
|
| + result = Dart_DevFSReadFileAsUTF8String(bad_uri2);
|
| + EXPECT(Dart_IsError(result));
|
| +}
|
| +
|
| #endif // !PRODUCT
|
|
|
| } // namespace dart
|
|
|