Unit test parser/tokenizer against double minus

Change-Id: I59bb592927544dd439025f928c32b3280c799297
Bug: b/402258176
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/18420
Reviewed-by: Takuto Ikuta <tikuta@google.com>
Commit-Queue: Takuto Ikuta <tikuta@google.com>
diff --git a/src/gn/parser_unittest.cc b/src/gn/parser_unittest.cc
index 8cfdb8d..6f85589 100644
--- a/src/gn/parser_unittest.cc
+++ b/src/gn/parser_unittest.cc
@@ -145,6 +145,18 @@
   DoExpressionErrorTest("(a +", 1, 4);
 }
 
+TEST(Parser, DoubleMinus) {
+  const char* input = "1--1\n";
+  const char* expected =
+      "BINARY(-)\n"
+      " LITERAL(1)\n"
+      " LITERAL(-1)\n";
+  DoExpressionPrintTest(input, expected);
+  DoExpressionErrorTest("1-- 1", 1, 3);
+  DoExpressionErrorTest("1 -- 1", 1, 4);
+  DoExpressionErrorTest("1 - - 1", 1, 5);
+}
+
 TEST(Parser, OrderOfOperationsLeftAssociative) {
   const char* input = "5 - 1 - 2\n";
   const char* expected =
diff --git a/src/gn/tokenizer_unittest.cc b/src/gn/tokenizer_unittest.cc
index d32cc31..a2aad0f 100644
--- a/src/gn/tokenizer_unittest.cc
+++ b/src/gn/tokenizer_unittest.cc
@@ -100,6 +100,20 @@
       CheckTokenizer("- + = += -= != ==  < > <= >= ! || && . ,", operators));
 }
 
+TEST(Tokenizer, DoubleMinus) {
+  TokenExpectation tokens[] = {{Token::INTEGER, "1"},
+                               {Token::MINUS, "-"},
+                               {Token::INTEGER, "-1"}};
+  EXPECT_TRUE(CheckTokenizer("  1 - -1 ", tokens));
+}
+
+TEST(Tokenizer, DoubleMinusNoSpace) {
+  TokenExpectation tokens[] = {{Token::INTEGER, "1"},
+                               {Token::MINUS, "-"},
+                               {Token::INTEGER, "-1"}};
+  EXPECT_TRUE(CheckTokenizer("  1--1 ", tokens));
+}
+
 TEST(Tokenizer, Scoper) {
   TokenExpectation scopers[] = {
       {Token::LEFT_BRACE, "{"},    {Token::LEFT_BRACKET, "["},