| // 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/executor.h" |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| #include "src/lib/testing/loop_fixture/test_loop_fixture.h" |
| |
| namespace { |
| |
| using Executor = gtest::TestLoopFixture; |
| |
| cmd::Command MakeCommand(std::string line) { |
| cmd::Command command; |
| command.Parse(std::move(line)); |
| return command; |
| } |
| |
| TEST_F(Executor, ExecuteNothing) { |
| cmd::Executor exec(dispatcher()); |
| EXPECT_EQ(ZX_ERR_NEXT, exec.Execute(cmd::Command(), nullptr)); |
| } |
| |
| TEST_F(Executor, Quit) { |
| cmd::Executor exec(dispatcher()); |
| EXPECT_EQ(ZX_ERR_STOP, exec.Execute(MakeCommand("exit"), nullptr)); |
| EXPECT_EQ(ZX_ERR_STOP, exec.Execute(MakeCommand("quit"), nullptr)); |
| } |
| |
| TEST_F(Executor, FailToExecute) { |
| cmd::Executor exec(dispatcher()); |
| EXPECT_EQ(ZX_ERR_NOT_FOUND, exec.Execute(MakeCommand("/does/not/exist"), nullptr)); |
| } |
| |
| TEST_F(Executor, CompleteBuiltin) { |
| cmd::Executor exec(dispatcher()); |
| cmd::Autocomplete autocomplete("seten"); |
| exec.Complete(&autocomplete); |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::ElementsAre("setenv")); |
| } |
| |
| TEST_F(Executor, CompletePath) { |
| cmd::Executor exec(dispatcher()); |
| cmd::Autocomplete autocomplete("/pkg/met"); |
| exec.Complete(&autocomplete); |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::ElementsAre("/pkg/meta")); |
| } |
| |
| TEST_F(Executor, CompleteDelegateToTask) { |
| cmd::Executor exec(dispatcher()); |
| cmd::Autocomplete autocomplete("getenv ANOTHER_TEST_ENVIRON_VAR_FOR_TES"); |
| |
| setenv("ANOTHER_TEST_ENVIRON_VAR_FOR_TEST", "BANANA", 1); |
| exec.Complete(&autocomplete); |
| ASSERT_THAT(autocomplete.TakeCompletions(), |
| testing::ElementsAre("getenv ANOTHER_TEST_ENVIRON_VAR_FOR_TEST")); |
| } |
| |
| } // namespace |