| // 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/command.h" |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| namespace { |
| |
| TEST(Command, ParseEmpty) { |
| cmd::Command command; |
| |
| EXPECT_TRUE(command.Parse("")); |
| EXPECT_TRUE(command.is_empty()); |
| |
| EXPECT_TRUE(command.Parse(" \t ")); |
| EXPECT_TRUE(command.is_empty()); |
| |
| EXPECT_TRUE(command.Parse("# This is a comment")); |
| EXPECT_TRUE(command.is_empty()); |
| |
| EXPECT_TRUE(command.Parse(" # Also a comment")); |
| EXPECT_TRUE(command.is_empty()); |
| |
| EXPECT_TRUE(command.Parse("control")); |
| EXPECT_FALSE(command.is_empty()); |
| } |
| |
| TEST(Command, Parse) { |
| cmd::Command command; |
| |
| EXPECT_TRUE(command.Parse("")); |
| ASSERT_THAT(command.args(), testing::ElementsAre()); |
| |
| EXPECT_TRUE(command.Parse("ls")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("ls")); |
| |
| EXPECT_TRUE(command.Parse("ls -lart")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("ls", "-lart")); |
| |
| EXPECT_TRUE(command.Parse("ls#not-a-comment")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("ls#not-a-comment")); |
| |
| EXPECT_TRUE(command.Parse("ls #a-comment")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("ls")); |
| |
| EXPECT_TRUE(command.Parse(" ls \t -lart \n banana\r")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("ls", "-lart", "banana")); |
| } |
| |
| TEST(Command, Quoted) { |
| cmd::Command command; |
| |
| EXPECT_TRUE(command.Parse(" \"\" ")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("")); |
| |
| EXPECT_TRUE(command.Parse(" \" \" ")); |
| ASSERT_THAT(command.args(), testing::ElementsAre(" ")); |
| |
| EXPECT_TRUE(command.Parse("ls \" \" -lart")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("ls", " ", "-lart")); |
| |
| EXPECT_FALSE(command.Parse("really ls\"not\" a-quote")); |
| ASSERT_THAT(command.args(), testing::ElementsAre()); |
| |
| EXPECT_FALSE(command.Parse("ls \"parse-error")); |
| ASSERT_THAT(command.args(), testing::ElementsAre()); |
| |
| EXPECT_FALSE(command.Parse("ls \"also-parse-error ")); |
| ASSERT_THAT(command.args(), testing::ElementsAre()); |
| |
| EXPECT_FALSE(command.Parse("ls \"another-parse-erro\"r ")); |
| ASSERT_THAT(command.args(), testing::ElementsAre()); |
| |
| EXPECT_TRUE(command.Parse("ls \"not-parse-error\" ")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("ls", "not-parse-error")); |
| |
| EXPECT_TRUE(command.Parse("\"a\tb\"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("a\tb")); |
| |
| EXPECT_TRUE(command.Parse("\"a\nb\"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("a\nb")); |
| |
| EXPECT_TRUE(command.Parse("\"\r\"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("\r")); |
| |
| EXPECT_TRUE(command.Parse("\"\\\"\"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("\"")); |
| |
| EXPECT_FALSE(command.Parse("\"\\\"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre()); |
| |
| EXPECT_TRUE(command.Parse("\"\\\\\\\"\"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("\\\"")); |
| |
| EXPECT_FALSE(command.Parse("\"\\z\"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre()); |
| |
| EXPECT_TRUE(command.Parse("comments are ok # see \"")); |
| ASSERT_THAT(command.args(), testing::ElementsAre("comments", "are", "ok")); |
| } |
| |
| } // namespace |