blob: d21ff2ae101e7df6fb6b523cf16f65fd754d57a5 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/cmd/tasks/cd_task.h"
#include <utility>
#include "gtest/gtest.h"
namespace {
void ChangeDirectory(std::string directory) {
cmd::Command command;
command.Parse("cd " + directory);
cmd::CdTask task(nullptr);
EXPECT_EQ(ZX_ERR_NEXT, task.Execute(std::move(command), nullptr));
}
void CheckDirectory(const char* expected) {
char buffer[PATH_MAX];
getcwd(buffer, sizeof(buffer));
EXPECT_STREQ(expected, buffer);
EXPECT_STREQ(expected, getenv("PWD"));
}
TEST(CdTask, Control) {
char original_directory[PATH_MAX];
getcwd(original_directory, sizeof(original_directory));
ChangeDirectory("/pkg");
CheckDirectory("/pkg");
EXPECT_EQ(0, chdir(original_directory)) << original_directory;
}
TEST(CdTask, RelativeTraveral) {
char original_directory[PATH_MAX];
getcwd(original_directory, sizeof(original_directory));
ChangeDirectory("/");
CheckDirectory("/");
ChangeDirectory("pkg");
CheckDirectory("/pkg");
ChangeDirectory("..");
CheckDirectory("/");
ChangeDirectory("..");
CheckDirectory("/");
EXPECT_EQ(0, chdir(original_directory)) << original_directory;
}
} // namespace