// 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
