blob: 07ea32c9289e0d5203b70fdf70a51d8bcae6d7b4 [file] [log] [blame]
Václav Kubernát989b5de2019-02-20 16:28:35 +01001
2/*
3 * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
4 * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
5 *
6 * Written by Václav Kubernát <kubervac@fit.cvut.cz>
7 *
8 */
9
Václav Kubernát26b56082020-02-03 18:28:56 +010010#include "trompeloeil_doctest.hpp"
Václav Kubernát43908fb2020-01-02 19:05:51 +010011#include "datastoreaccess_mock.hpp"
Václav Kubernát3a99f002020-03-31 02:27:41 +020012#include "leaf_data_helpers.hpp"
Václav Kubernát989b5de2019-02-20 16:28:35 +010013#include "parser.hpp"
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010014#include "pretty_printers.hpp"
Václav Kubernát989b5de2019-02-20 16:28:35 +010015#include "static_schema.hpp"
16
17TEST_CASE("enum completion")
18{
19 auto schema = std::make_shared<StaticSchema>();
20 schema->addModule("mod");
Václav Kubernátefcac932020-01-10 15:26:32 +010021 schema->addContainer("/", "mod:contA");
Václav Kubernát3a99f002020-03-31 02:27:41 +020022 schema->addLeaf("/", "mod:leafEnum", createEnum({"lala", "lol", "data", "coze"}));
23 schema->addLeaf("/mod:contA", "mod:leafInCont", createEnum({"abc", "def"}));
Václav Kubernátefcac932020-01-10 15:26:32 +010024 schema->addList("/", "mod:list", {"number"});
Václav Kubernát3a99f002020-03-31 02:27:41 +020025 schema->addLeaf("/mod:list", "mod:number", yang::Int32{});
26 schema->addLeaf("/mod:list", "mod:leafInList", createEnum({"ano", "anoda", "ne", "katoda"}));
Václav Kubernát43908fb2020-01-02 19:05:51 +010027 auto mockDatastore = std::make_shared<MockDatastoreAccess>();
28 // The parser will use DataQuery for key value completion, but I'm not testing that here, so I don't return anything.
29 ALLOW_CALL(*mockDatastore, listInstances("/mod:list"))
30 .RETURN(std::vector<ListInstance>{});
31
32 // DataQuery gets the schema from DatastoreAccess once
33 auto expectation = NAMED_REQUIRE_CALL(*mockDatastore, schema())
34 .RETURN(schema);
35 auto dataQuery = std::make_shared<DataQuery>(*mockDatastore);
36 Parser parser(schema, dataQuery);
Václav Kubernát989b5de2019-02-20 16:28:35 +010037 std::string input;
38 std::ostringstream errorStream;
39
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010040 std::set<std::string> expectedCompletions;
41 int expectedContextLength;
Václav Kubernát989b5de2019-02-20 16:28:35 +010042
43 SECTION("set mod:leafEnum ")
44 {
45 input = "set mod:leafEnum ";
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010046 expectedCompletions = {"lala", "lol", "data", "coze"};
47 expectedContextLength = 0;
Václav Kubernát989b5de2019-02-20 16:28:35 +010048 }
49
50 SECTION("set mod:leafEnum c")
51 {
52 input = "set mod:leafEnum c";
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010053 expectedCompletions = {"coze"};
54 expectedContextLength = 1;
Václav Kubernát989b5de2019-02-20 16:28:35 +010055 }
56
57 SECTION("set mod:leafEnum l")
58 {
59 input = "set mod:leafEnum l";
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010060 expectedCompletions = {"lala", "lol"};
61 expectedContextLength = 1;
Václav Kubernát989b5de2019-02-20 16:28:35 +010062 }
63
64
65 SECTION("set mod:contA/leafInCont ")
66 {
67 input = "set mod:contA/leafInCont ";
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010068 expectedCompletions = {"abc", "def"};
69 expectedContextLength = 0;
Václav Kubernát989b5de2019-02-20 16:28:35 +010070 }
71
72 SECTION("set mod:list[number=42]/leafInList ")
73 {
74 input = "set mod:list[number=42]/leafInList ";
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010075 expectedCompletions = {"ano", "anoda", "ne", "katoda"};
76 expectedContextLength = 0;
Václav Kubernát989b5de2019-02-20 16:28:35 +010077 }
78
Václav Kubernát1ed4aa32020-01-23 13:13:28 +010079 REQUIRE(parser.completeCommand(input, errorStream) == (Completions{expectedCompletions, expectedContextLength}));
Václav Kubernát989b5de2019-02-20 16:28:35 +010080}