|  | // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | #include "bin/directory.h" | 
|  | #include "include/dart_api.h" | 
|  | #include "platform/assert.h" | 
|  | #include "vm/unit_test.h" | 
|  |  | 
|  | namespace dart { | 
|  |  | 
|  | VM_UNIT_TEST_CASE(DirectoryCurrentNoScope) { | 
|  | char* current_dir = dart::bin::Directory::CurrentNoScope(); | 
|  | EXPECT_NOTNULL(current_dir); | 
|  | free(current_dir); | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectoryCurrent) { | 
|  | const char* current = dart::bin::Directory::Current(nullptr); | 
|  | EXPECT_NOTNULL(current); | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectoryExists) { | 
|  | const char* current = dart::bin::Directory::Current(nullptr); | 
|  | EXPECT_NOTNULL(current); | 
|  |  | 
|  | dart::bin::Directory::ExistsResult r = | 
|  | dart::bin::Directory::Exists(nullptr, current); | 
|  | EXPECT_EQ(dart::bin::Directory::EXISTS, r); | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectorySystemTemp) { | 
|  | const char* system_temp = dart::bin::Directory::SystemTemp(nullptr); | 
|  | EXPECT_NOTNULL(system_temp); | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectorySystemTempExists) { | 
|  | const char* system_temp = dart::bin::Directory::SystemTemp(nullptr); | 
|  | EXPECT_NOTNULL(system_temp); | 
|  |  | 
|  | dart::bin::Directory::ExistsResult r = | 
|  | dart::bin::Directory::Exists(nullptr, system_temp); | 
|  | EXPECT_EQ(dart::bin::Directory::EXISTS, r); | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectoryCreateTemp) { | 
|  | const char* kTempPrefix = "test_prefix"; | 
|  | const char* system_temp = dart::bin::Directory::SystemTemp(nullptr); | 
|  | EXPECT_NOTNULL(system_temp); | 
|  |  | 
|  | const char* temp_dir = dart::bin::Directory::CreateTemp(nullptr, kTempPrefix); | 
|  | EXPECT_NOTNULL(temp_dir); | 
|  |  | 
|  | // Make sure temp_dir contains test_prefix. | 
|  | EXPECT_NOTNULL(strstr(temp_dir, kTempPrefix)); | 
|  |  | 
|  | // Cleanup. | 
|  | EXPECT(dart::bin::Directory::Delete(nullptr, temp_dir, false)); | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectorySetCurrent) { | 
|  | const char* current = dart::bin::Directory::Current(nullptr); | 
|  | EXPECT_NOTNULL(current); | 
|  |  | 
|  | const char* system_temp = dart::bin::Directory::SystemTemp(nullptr); | 
|  | EXPECT_NOTNULL(system_temp); | 
|  |  | 
|  | EXPECT(dart::bin::Directory::SetCurrent(nullptr, system_temp)); | 
|  |  | 
|  | const char* new_current = dart::bin::Directory::Current(nullptr); | 
|  | EXPECT_NOTNULL(new_current); | 
|  |  | 
|  | EXPECT_NOTNULL(strstr(new_current, system_temp)); | 
|  |  | 
|  | EXPECT(dart::bin::Directory::SetCurrent(nullptr, current)); | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectoryCreateDelete) { | 
|  | const char* kTempDirName = "create_delete_test_name"; | 
|  |  | 
|  | const char* system_temp = dart::bin::Directory::SystemTemp(nullptr); | 
|  | EXPECT_NOTNULL(system_temp); | 
|  |  | 
|  | const intptr_t name_len = | 
|  | snprintf(nullptr, 0, "%s/%s", system_temp, kTempDirName); | 
|  | ASSERT(name_len > 0); | 
|  | char* name = new char[name_len + 1]; | 
|  | snprintf(name, name_len + 1, "%s/%s", system_temp, kTempDirName); | 
|  |  | 
|  | // Make a directory. | 
|  | EXPECT(dart::bin::Directory::Create(nullptr, name)); | 
|  |  | 
|  | // Make sure it exists. | 
|  | dart::bin::Directory::ExistsResult r = | 
|  | dart::bin::Directory::Exists(nullptr, name); | 
|  | EXPECT_EQ(dart::bin::Directory::EXISTS, r); | 
|  |  | 
|  | // Cleanup. | 
|  | EXPECT(dart::bin::Directory::Delete(nullptr, name, false)); | 
|  | delete[] name; | 
|  | } | 
|  |  | 
|  | TEST_CASE(DirectoryRename) { | 
|  | const char* kTempDirName = "rename_test_name"; | 
|  |  | 
|  | const char* system_temp = dart::bin::Directory::SystemTemp(nullptr); | 
|  | EXPECT_NOTNULL(system_temp); | 
|  |  | 
|  | const intptr_t name_len = | 
|  | snprintf(nullptr, 0, "%s/%s", system_temp, kTempDirName); | 
|  | ASSERT(name_len > 0); | 
|  | char* name = new char[name_len + 1]; | 
|  | snprintf(name, name_len + 1, "%s/%s", system_temp, kTempDirName); | 
|  |  | 
|  | // Make a directory. | 
|  | EXPECT(dart::bin::Directory::Create(nullptr, name)); | 
|  |  | 
|  | // Make sure it exists. | 
|  | dart::bin::Directory::ExistsResult r = | 
|  | dart::bin::Directory::Exists(nullptr, name); | 
|  | EXPECT_EQ(dart::bin::Directory::EXISTS, r); | 
|  |  | 
|  | const intptr_t new_name_len = | 
|  | snprintf(nullptr, 0, "%s/%snewname", system_temp, kTempDirName); | 
|  | ASSERT(new_name_len > 0); | 
|  | char* new_name = new char[new_name_len + 1]; | 
|  | snprintf(new_name, new_name_len + 1, "%s/%snewname", system_temp, | 
|  | kTempDirName); | 
|  |  | 
|  | EXPECT(dart::bin::Directory::Rename(nullptr, name, new_name)); | 
|  |  | 
|  | r = dart::bin::Directory::Exists(nullptr, new_name); | 
|  | EXPECT_EQ(dart::bin::Directory::EXISTS, r); | 
|  |  | 
|  | r = dart::bin::Directory::Exists(nullptr, name); | 
|  | EXPECT_EQ(dart::bin::Directory::DOES_NOT_EXIST, r); | 
|  |  | 
|  | EXPECT(dart::bin::Directory::Delete(nullptr, new_name, false)); | 
|  | delete[] name; | 
|  | delete[] new_name; | 
|  | } | 
|  |  | 
|  | }  // namespace dart |