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 |