Tab completion for list keys

Change-Id: Ifbebd0e27d3a26237c12e5492a2737612fc7a644
diff --git a/tests/path_completion.cpp b/tests/path_completion.cpp
index cd1a2c6..7a9090b 100644
--- a/tests/path_completion.cpp
+++ b/tests/path_completion.cpp
@@ -33,70 +33,142 @@
     std::ostringstream errorStream;
     std::set<std::string> expected;
 
-    SECTION("ls ")
+    SECTION("node name completion")
     {
-        input = "ls ";
-        expected = {"example:ano", "example:anoda", "example:bota", "second:amelie", "example:list", "example:twoKeyList"};
+        SECTION("ls ")
+        {
+            input = "ls ";
+            expected = {"example:ano", "example:anoda", "example:bota", "second:amelie", "example:list", "example:twoKeyList"};
+        }
+
+        SECTION("ls e")
+        {
+            input = "ls e";
+            expected = {"xample:ano", "xample:anoda", "xample:bota", "xample:list", "xample:twoKeyList"};
+        }
+
+        SECTION("ls example:ano")
+        {
+            input = "ls example:ano";
+            expected = {"", "da"};
+        }
+
+        SECTION("ls example:ano/example:a")
+        {
+            input = "ls example:ano/example:a";
+            expected = {"2"};
+        }
+
+        SECTION("ls x")
+        {
+            input = "ls x";
+            expected = {};
+        }
+
+        SECTION("ls /")
+        {
+            input = "ls /";
+            expected = {"example:ano", "example:anoda", "example:bota", "second:amelie", "example:list", "example:twoKeyList"};
+        }
+
+        SECTION("ls /e")
+        {
+            input = "ls /e";
+            expected = {"xample:ano", "xample:anoda", "xample:bota", "xample:list", "xample:twoKeyList"};
+        }
+
+        SECTION("ls /s")
+        {
+            input = "ls /s";
+            expected = {"econd:amelie"};
+        }
+
+        SECTION("ls /example:list[number=3]/")
+        {
+            input = "ls /example:list[number=3]/";
+            expected = {"example:contInList"};
+        }
+
+        SECTION("ls /example:list[number=3]/c")
+        {
+            input = "ls /example:list[number=3]/e";
+            expected = {"xample:contInList"};
+        }
+
+        SECTION("ls /example:list[number=3]/a")
+        {
+            input = "ls /example:list[number=3]/a";
+            expected = {};
+        }
     }
 
-    SECTION("ls e")
+    SECTION("list keys completion")
     {
-        input = "ls e";
-        expected = {"xample:ano", "xample:anoda", "xample:bota", "xample:list", "xample:twoKeyList"};
-    }
+        SECTION("cd example:lis")
+        {
+            input = "cd example:lis";
+            expected = {"t"};
+        }
 
-    SECTION("ls example:ano")
-    {
-        input = "ls example:ano";
-        expected = {"", "da"};
-    }
+        SECTION("cd example:list[")
+        {
+            input = "cd example:list[";
+            expected = {"number="};
+        }
 
-    SECTION("ls example:ano/example:a")
-    {
-        input = "ls example:ano/example:a";
-        expected = {"2"};
-    }
+        SECTION("cd example:list[numb")
+        {
+            input = "cd example:list[numb";
+            expected = {"er="};
+        }
 
-    SECTION("ls x")
-    {
-        input = "ls x";
-        expected = {};
-    }
+        SECTION("cd example:list[number")
+        {
+            input = "cd example:list[number";
+            expected = {"="};
+        }
 
-    SECTION("ls /")
-    {
-        input = "ls /";
-        expected = {"example:ano", "example:anoda", "example:bota", "second:amelie", "example:list", "example:twoKeyList"};
-    }
+        SECTION("cd example:list[number=12")
+        {
+            input = "cd example:list[number=12";
+            expected = {"]/"};
+        }
 
-    SECTION("ls /e")
-    {
-        input = "ls /e";
-        expected = {"xample:ano", "xample:anoda", "xample:bota", "xample:list", "xample:twoKeyList"};
-    }
+        SECTION("cd example:list[number=12]")
+        {
+            input = "cd example:list[number=12]";
+            expected = {"/"};
+        }
 
-    SECTION("ls /s")
-    {
-        input = "ls /s";
-        expected = {"econd:amelie"};
-    }
+        SECTION("cd example:twoKeyList[")
+        {
+            input = "cd example:twoKeyList[";
+            expected = {"name=", "number="};
+        }
 
-    SECTION("ls /example:list[number=3]/")
-    {
-        input = "ls /example:list[number=3]/";
-        expected = {"example:contInList"};
-    }
+        SECTION("cd example:twoKeyList[name=\"AHOJ\"][")
+        {
+            input = "cd example:twoKeyList[name=\"AHOJ\"][";
+            expected = {"number="};
+        }
 
-    SECTION("ls /example:list[number=3]/c")
-    {
-        input = "ls /example:list[number=3]/e";
-        expected = {"xample:contInList"};
-    }
+        SECTION("cd example:twoKeyList[number=42][")
+        {
+            input = "cd example:twoKeyList[number=42][";
+            expected = {"name="};
+        }
 
-    SECTION("ls /example:list[number=3]/a")
-    {
-        input = "ls /example:list[number=3]/a";
-        expected = {};
+        SECTION("cd example:twoKeyList[name=\"AHOJ\"][number=123")
+        {
+            input = "cd example:twoKeyList[name=\"AHOJ\"][number=123";
+            expected = {"]/"};
+        }
+
+        SECTION("cd example:twoKeyList[name=\"AHOJ\"][number=123]")
+        {
+            input = "cd example:twoKeyList[name=\"AHOJ\"][number=123]";
+            expected = {"/"};
+        }
     }
 
     REQUIRE(parser.completeCommand(input, errorStream) == expected);