[pkg-d-commits] [ldc] 34/95: Add some more config parser unittests

Matthias Klumpp mak at moszumanska.debian.org
Thu Jul 13 20:53:58 UTC 2017


This is an automated email from the git hooks/post-receive script.

mak pushed a commit to annotated tag v1.3.0-beta1
in repository ldc.

commit 93facb0b7072d01b7872c87f834f8a140260a4a6
Author: Martin <noone at nowhere.com>
Date:   Sun Feb 26 13:20:46 2017 +0100

    Add some more config parser unittests
---
 driver/config.d | 96 ++++++++++++++++++++++++++++++---------------------------
 1 file changed, 51 insertions(+), 45 deletions(-)

diff --git a/driver/config.d b/driver/config.d
index 637fd97..22c4ae0 100644
--- a/driver/config.d
+++ b/driver/config.d
@@ -104,9 +104,8 @@ Setting[] parseConfigFile(const(char)* filename)
     auto file = fopen(filename, "r");
     if (!file)
     {
-        throw new Exception(
-            "could not open config file " ~
-            dFilename ~ " for reading");
+        throw new Exception("could not open config file " ~
+                            dFilename ~ " for reading");
     }
 
     fseek(file, 0, SEEK_END);
@@ -118,7 +117,7 @@ Setting[] parseConfigFile(const(char)* filename)
     content = content[0 .. numRead];
     fclose(file);
 
-    auto parser = new Parser(cast(string) content, dFilename);
+    auto parser = Parser(cast(string) content, dFilename);
     return parser.parseConfig();
 }
 
@@ -198,7 +197,7 @@ string humanReadableToken(in Token tok)
     }
 }
 
-class Parser
+struct Parser
 {
     string filename;
     string content;
@@ -225,8 +224,8 @@ class Parser
     {
         enum fmt = "Error while reading config file: %.*s\nline %d: %.*s";
         char[1024] buf;
-        auto len = snprintf(buf.ptr, buf.length, fmt,
-                filename.length, filename.ptr, lineNum, msg.length, msg.ptr);
+        auto len = snprintf(buf.ptr, buf.length, fmt, filename.length,
+                            filename.ptr, lineNum, msg.length, msg.ptr);
         throw new Exception(buf[0 .. len].idup);
     }
 
@@ -267,8 +266,8 @@ class Parser
             do
             {
                 lastChar = getChar();
-            } while (lastChar != '\n' && lastChar != '\0');
-
+            }
+            while (lastChar != '\n' && lastChar != '\0');
             return getTok(outStr);
         }
 
@@ -381,7 +380,7 @@ class Parser
     {
         s = s.length ? " ("~s~")" : "";
         error("Was expecting token " ~ humanReadableToken(expected) ~
-                ". Got " ~ humanReadableToken(tok) ~ s ~ " instead.");
+              ". Got " ~ humanReadableToken(tok) ~ s ~ " instead.");
     }
 
     string accept(in Token expected)
@@ -466,7 +465,7 @@ class Parser
                 case Token.comma:
                     break;
                 case Token.rbracket:
-                    return new ArraySetting(name, arrVal);;
+                    return new ArraySetting(name, arrVal);
                 default:
                     unexpectedTokenError(t, Token.comma, s);
                     assert(false);
@@ -501,61 +500,68 @@ unittest
         assert((cast(ScalarSetting) setting).val == expected);
     }
 
+    testScalar(`""`, "");
     testScalar(`"abc\r\ndef\t\"quoted/\\123\""`,
                 "abc\r\ndef\t\"quoted/\\123\"");
     testScalar(`"concatenated" " multiline"
                 " strings"`, "concatenated multiline strings");
+}
+
+unittest
+{
+    static void testArray(string input, string[] expected)
+    {
+        auto setting = new Parser(input).parseValue(null);
+        assert(setting.type == Setting.Type.array);
+        assert((cast(ArraySetting) setting).vals == expected);
+    }
+
+    testArray(`[]`, []);
+    testArray(`[ "a" ]`, [ "a" ]);
+    testArray(`[ "a", ]`, [ "a" ]);
+    testArray(`[ "a", "b" ]`, [ "a", "b" ]);
+    testArray(`[
+            // comment
+            "a",
+            // comment
+            "b"
+        ]`, [ "a", "b" ]);
+}
 
+unittest
+{
     enum input =
 `// comment
 
 // comment
-group-1:
+group-1: {};
+// comment
+Group-2:
 {
     // comment
     scalar = "abc";
     // comment
-    array_1 = [ "a", "b" ];
-    array_2 = [
-        "c",
-    ];
+    Array_1 = [ "a" ];
 };
-// comment
-group-2: { emptyArray = []; };
 `;
 
-    auto settings = new Parser(input).parseConfig();
+    auto settings = Parser(input).parseConfig();
     assert(settings.length == 2);
 
     assert(settings[0].name == "group-1");
     assert(settings[0].type == Setting.Type.group);
-    auto group1 = cast(GroupSetting) settings[0];
-    assert(group1.children.length == 3);
-
-    assert(group1.children[0].name == "scalar");
-    assert(group1.children[0].type == Setting.Type.scalar);
-    assert((cast(ScalarSetting) group1.children[0]).val == "abc");
-
-    assert(group1.children[1].name == "array_1");
-    assert(group1.children[1].type == Setting.Type.array);
-    auto array1 = cast(ArraySetting) group1.children[1];
-    assert(array1.vals.length == 2);
-    assert(array1.vals[0] == "a");
-    assert(array1.vals[1] == "b");
-
-    assert(group1.children[2].name == "array_2");
-    assert(group1.children[2].type == Setting.Type.array);
-    auto array2 = cast(ArraySetting) group1.children[2];
-    assert(array2.vals.length == 1);
-    assert(array2.vals[0] == "c");
-
-    assert(settings[1].name == "group-2");
+    assert((cast(GroupSetting) settings[0]).children == []);
+
+    assert(settings[1].name == "Group-2");
     assert(settings[1].type == Setting.Type.group);
     auto group2 = cast(GroupSetting) settings[1];
-    assert(group2.children.length == 1);
+    assert(group2.children.length == 2);
+
+    assert(group2.children[0].name == "scalar");
+    assert(group2.children[0].type == Setting.Type.scalar);
+    assert((cast(ScalarSetting) group2.children[0]).val == "abc");
 
-    assert(group2.children[0].name == "emptyArray");
-    assert(group2.children[0].type == Setting.Type.array);
-    auto emptyArray = cast(ArraySetting) group2.children[0];
-    assert(emptyArray.vals.length == 0);
+    assert(group2.children[1].name == "Array_1");
+    assert(group2.children[1].type == Setting.Type.array);
+    assert((cast(ArraySetting) group2.children[1]).vals == [ "a" ]);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-d/ldc.git



More information about the pkg-d-commits mailing list