Added test of international character support
authorDemetri Obenour <demetriobenour@gmail.com>
Thu, 8 May 2014 15:01:07 +0000 (11:01 -0400)
committerDemetri Obenour <demetriobenour@gmail.com>
Thu, 8 May 2014 15:01:07 +0000 (11:01 -0400)
src/depfile_parser.cc
src/depfile_parser_test.cc

index 4ca3943..dc53d4f 100644 (file)
@@ -47,7 +47,7 @@ bool DepfileParser::Parse(string* content, string* err) {
       const char* start = in;
       
     {
-      char yych;
+      unsigned char yych;
       static const unsigned char yybm[] = {
           0,   0,   0,   0,   0,   0,   0,   0, 
           0,   0,   0,   0,   0,   0,   0,   0, 
@@ -65,22 +65,22 @@ bool DepfileParser::Parse(string* content, string* err) {
         128, 128, 128, 128, 128, 128, 128, 128, 
         128, 128, 128, 128, 128, 128, 128, 128, 
         128, 128, 128, 128,   0, 128, 128,   0, 
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
-          0,   0,   0,   0,   0,   0,   0,   0
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
+        128, 128, 128, 128, 128, 128, 128, 128
       };
 
       yych = *in;
@@ -106,24 +106,28 @@ bool DepfileParser::Parse(string* content, string* err) {
           }
         }
       } else {
-        if (yych <= '^') {
-          if (yych <= 'Z') {
+        if (yych <= '_') {
+          if (yych <= '[') {
             if (yych <= '?') goto yy9;
-            goto yy5;
+            if (yych <= 'Z') goto yy5;
+            goto yy9;
           } else {
-            if (yych != '\\') goto yy9;
+            if (yych <= '\\') goto yy2;
+            if (yych <= '^') goto yy9;
+            goto yy5;
           }
         } else {
-          if (yych <= '{') {
-            if (yych == '`') goto yy9;
-            goto yy5;
-          } else {
-            if (yych <= '|') goto yy9;
-            if (yych <= '~') goto yy5;
+          if (yych <= '|') {
+            if (yych <= '`') goto yy9;
+            if (yych <= '{') goto yy5;
             goto yy9;
+          } else {
+            if (yych == 0x7F) goto yy9;
+            goto yy5;
           }
         }
       }
+yy2:
       ++in;
       if ((yych = *in) <= '"') {
         if (yych <= '\f') {
index a5f3321..c7a163c 100644 (file)
@@ -121,18 +121,21 @@ TEST_F(DepfileParserTest, SpecialChars) {
   EXPECT_TRUE(Parse(
 "C:/Program\\ Files\\ (x86)/Microsoft\\ crtdefs.h: \n"
 " en@quot.header~ t+t-x!=1 \n"
-" openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif",
+" openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif\n"
+" Fu\303\244ball",
       &err));
   ASSERT_EQ("", err);
   EXPECT_EQ("C:/Program Files (x86)/Microsoft crtdefs.h",
             parser_.out_.AsString());
-  ASSERT_EQ(3u, parser_.ins_.size());
+  ASSERT_EQ(4u, parser_.ins_.size());
   EXPECT_EQ("en@quot.header~",
             parser_.ins_[0].AsString());
   EXPECT_EQ("t+t-x!=1",
             parser_.ins_[1].AsString());
   EXPECT_EQ("openldap/slapd.d/cn=config/cn=schema/cn={0}core.ldif",
             parser_.ins_[2].AsString());
+  EXPECT_EQ("Fu\303\244ball",
+            parser_.ins_[3].AsString());
 }
 
 TEST_F(DepfileParserTest, UnifyMultipleOutputs) {