| // 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/autocomplete.h" | |
| #include <gmock/gmock.h> | |
| #include <gtest/gtest.h> | |
| namespace { | |
| TEST(Command, Parse) { | |
| { | |
| cmd::Autocomplete autocomplete(""); | |
| EXPECT_TRUE(autocomplete.tokens().empty()); | |
| EXPECT_EQ("", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete(" \t "); | |
| EXPECT_TRUE(autocomplete.tokens().empty()); | |
| EXPECT_EQ("", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("# This is a comment"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("#", "This", "is", "a")); | |
| EXPECT_EQ("comment", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete(" #Also a comment "); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("#Also", "a", "comment")); | |
| EXPECT_EQ("", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("ls"); | |
| EXPECT_TRUE(autocomplete.tokens().empty()); | |
| EXPECT_EQ("ls", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("ls -lart"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("ls")); | |
| EXPECT_EQ("-lart", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("ls#not-a-comment"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre()); | |
| EXPECT_EQ("ls#not-a-comment", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("ls #a-comment"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("ls")); | |
| EXPECT_EQ("#a-comment", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete(" ls \t -lart \n banana\r"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("ls", "-lart", "banana")); | |
| EXPECT_EQ("", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete(" \"\" "); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("\"\"")); | |
| EXPECT_EQ("", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("ls \" \" -lart"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("ls", "\"", "\"")); | |
| EXPECT_EQ("-lart", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("really ls\"not\" a-quote"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("really", "ls\"not\"")); | |
| EXPECT_EQ("a-quote", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("ls \"parse-error"); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("ls")); | |
| EXPECT_EQ("\"parse-error", autocomplete.fragment()); | |
| } | |
| { | |
| cmd::Autocomplete autocomplete("ls \"also-parse-error "); | |
| ASSERT_THAT(autocomplete.tokens(), testing::ElementsAre("ls", "\"also-parse-error")); | |
| EXPECT_EQ("", autocomplete.fragment()); | |
| } | |
| } | |
| TEST(Command, AddCompletion) { | |
| cmd::Autocomplete autocomplete("ls /bin/l"); | |
| autocomplete.AddCompletion("/bin/ls"); | |
| autocomplete.AddCompletion("/bin/ln"); | |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::ElementsAre("ls /bin/ls", "ls /bin/ln")); | |
| } | |
| TEST(Command, CompleteAsPathAbsolute) { | |
| cmd::Autocomplete autocomplete("ls /pk"); | |
| autocomplete.CompleteAsPath(); | |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::ElementsAre("ls /pkg")); | |
| } | |
| TEST(Command, CompleteAsPathRelative) { | |
| cmd::Autocomplete autocomplete("ls pk"); | |
| autocomplete.CompleteAsPath(); | |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::ElementsAre("ls pkg")); | |
| } | |
| TEST(Command, CompleteEmptyAsPathRelative) { | |
| cmd::Autocomplete autocomplete(""); | |
| autocomplete.CompleteAsPath(); | |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::Contains("pkg")); | |
| } | |
| TEST(Command, CompleteAsDirectoryEntry) { | |
| cmd::Autocomplete autocomplete("ls met"); | |
| autocomplete.CompleteAsDirectoryEntry("/pkg"); | |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::ElementsAre("ls meta")); | |
| } | |
| TEST(Command, CompleteAsEnvironmentVariable) { | |
| setenv("MY_TEST_ENVIRON_VAR", "BANANA", 1); | |
| cmd::Autocomplete autocomplete("getenv MY_TEST_ENVIRON_VA"); | |
| autocomplete.CompleteAsEnvironmentVariable(); | |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::ElementsAre("getenv MY_TEST_ENVIRON_VAR")); | |
| unsetenv("MY_TEST_ENVIRON_VAR"); | |
| } | |
| TEST(Command, CompleteEmptyStringAsEnvironmentVariable) { | |
| setenv("AAAAA_MY_TEST_ENV", "BANANA", 1); | |
| cmd::Autocomplete autocomplete(""); | |
| autocomplete.CompleteAsEnvironmentVariable(); | |
| ASSERT_THAT(autocomplete.TakeCompletions(), testing::Contains("AAAAA_MY_TEST_ENV")); | |
| unsetenv("AAAAA_MY_TEST_ENV"); | |
| } | |
| } // namespace |