Commit c0e9a524 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

plist: update tests

parent b5333e75
Loading
Loading
Loading
Loading
+129 −91
Original line number Diff line number Diff line
@@ -35,18 +35,95 @@ void test_parse_simple() {

  PropertyListParser parser(confstr.c_str(), confstr.size());
  PropertyList plist;
  EXPECT(parser.parse(&plist) == true);
  if (!parser.parse(&plist)) {
    std::cerr << parser.get_error() << std::endl;
    std::exit(1);
  }

  EXPECT_EQ(plist.size(), 3);
  EXPECT_EQ(plist[0].kind, PropertyKind::VALUE_LITERAL);
  EXPECT_STREQ(plist[0].name, "prop0");
  EXPECT_EQ(plist[0].size(), 1);
  EXPECT_STREQ(plist[0][0], "1337");
  EXPECT_STREQ(plist[0], "1337");
  EXPECT_EQ(plist[1].kind, PropertyKind::VALUE);
  EXPECT_STREQ(plist[1].name, "prop1");
  EXPECT_EQ(plist[1].size(), 1);
  EXPECT_STREQ(plist[1][0], "hello");
  EXPECT_STREQ(plist[1], "hello");
  EXPECT_EQ(plist[2].kind, PropertyKind::VALUE);
  EXPECT_STREQ(plist[2].name, "prop2");
  EXPECT_EQ(plist[2].size(), 1);
  EXPECT_STREQ(plist[2][0], "world");
  EXPECT_STREQ(plist[2], "world");
}

void test_parse_tuple() {
  std::string confstr =
      R"(
        prop0: 1337 1338 1339;
      )";

  PropertyListParser parser(confstr.c_str(), confstr.size());
  PropertyList plist;
  if (!parser.parse(&plist)) {
    std::cerr << parser.get_error() << std::endl;
    std::exit(1);
  }

  EXPECT_EQ(plist.size(), 1);
  EXPECT_STREQ(plist[0].name, "prop0");
  EXPECT_EQ(plist[0].kind, PropertyKind::TUPLE);
  EXPECT_EQ(plist[0].size(), 3);
  EXPECT_STREQ(plist[0][0], "1337");
  EXPECT_STREQ(plist[0][1], "1338");
  EXPECT_STREQ(plist[0][2], "1339");
}

void test_parse_list() {
  std::string confstr =
      R"(
        prop0: 1337, 1338, 1339;
      )";

  PropertyListParser parser(confstr.c_str(), confstr.size());
  PropertyList plist;
  if (!parser.parse(&plist)) {
    std::cerr << parser.get_error() << std::endl;
    std::exit(1);
  }

  EXPECT_EQ(plist.size(), 1);
  EXPECT_STREQ(plist[0].name, "prop0");
  EXPECT_EQ(plist[0].kind, PropertyKind::LIST);
  EXPECT_EQ(plist[0].size(), 3);
  EXPECT_STREQ(plist[0][0], "1337");
  EXPECT_STREQ(plist[0][1], "1338");
  EXPECT_STREQ(plist[0][2], "1339");
}

void test_parse_tuple_list() {
  std::string confstr =
      R"(
        prop0: a 1, b 2, c 3;
      )";

  PropertyListParser parser(confstr.c_str(), confstr.size());
  PropertyList plist;
  if (!parser.parse(&plist)) {
    std::cerr << parser.get_error() << std::endl;
    std::exit(1);
  }

  EXPECT_EQ(plist.size(), 1);
  EXPECT_STREQ(plist[0].name, "prop0");
  EXPECT_EQ(plist[0].kind, PropertyKind::LIST);
  EXPECT_EQ(plist[0].size(), 3);
  EXPECT_EQ(plist[0][0].kind, PropertyKind::TUPLE);
  EXPECT_EQ(plist[0][0].size(), 2);
  EXPECT_STREQ(plist[0][0][0], "a");
  EXPECT_STREQ(plist[0][0][1], "1");
  EXPECT_EQ(plist[0][1].kind, PropertyKind::TUPLE);
  EXPECT_EQ(plist[0][1].size(), 2);
  EXPECT_STREQ(plist[0][1][0], "b");
  EXPECT_STREQ(plist[0][1][1], "2");
  EXPECT_EQ(plist[0][2].kind, PropertyKind::TUPLE);
  EXPECT_EQ(plist[0][2].size(), 2);
  EXPECT_STREQ(plist[0][2][0], "c");
  EXPECT_STREQ(plist[0][2][1], "3");
}

void test_parse_element() {
@@ -63,28 +140,25 @@ void test_parse_element() {

  PropertyListParser parser(confstr.c_str(), confstr.size());
  PropertyList plist;
  EXPECT(parser.parse(&plist) == true);
  if (!parser.parse(&plist)) {
    std::cerr << parser.get_error() << std::endl;
    std::exit(1);
  }

  EXPECT_EQ(plist.size(), 2);
  EXPECT_STREQ(plist[0].name, "blah");
  EXPECT_EQ(plist[0].size(), 1);
  EXPECT_STREQ(plist[0][0], "xxx");
  EXPECT_STREQ(plist[0], "xxx");

  EXPECT_STREQ(plist[1].name, "elem");
  auto elem = plist[1].child.get();

  EXPECT_EQ(elem->size(), 3);
  EXPECT_STREQ((*elem)[0].name, "prop0");
  EXPECT_EQ((*elem)[0].size(), 1);
  EXPECT_STREQ((*elem)[0][0], "1337");

  EXPECT_STREQ((*elem)[1].name, "prop1");
  EXPECT_EQ((*elem)[1].size(), 1);
  EXPECT_STREQ((*elem)[1][0], "hello");

  EXPECT_STREQ((*elem)[2].name, "prop2");
  EXPECT_EQ((*elem)[2].size(), 1);
  EXPECT_STREQ((*elem)[2][0], "world");
  const auto& elem = plist[1];
  EXPECT_EQ(elem.kind, PropertyKind::MAP);
  EXPECT_EQ(elem.size(), 3);
  EXPECT_STREQ(elem[0].name, "prop0");
  EXPECT_STREQ(elem[0], "1337");
  EXPECT_STREQ(elem[1].name, "prop1");
  EXPECT_STREQ(elem[1], "hello");
  EXPECT_STREQ(elem[2].name, "prop2");
  EXPECT_STREQ(elem[2], "world");
}

void test_parse_nested() {
@@ -97,31 +171,6 @@ void test_parse_nested() {
        }
      )";

  PropertyListParser parser(confstr.c_str(), confstr.size());
  PropertyList plist;
  EXPECT(parser.parse(&plist) == true);

  EXPECT_EQ(plist.size(), 1);
  EXPECT_STREQ(plist[0].name, "outer");
  auto outer = plist[0].child.get();

  EXPECT_EQ(outer->size(), 1);
  EXPECT_STREQ((*outer)[0].name, "inner");
  auto inner = (*outer)[0].child.get();

  EXPECT_EQ(inner->size(), 1);
  EXPECT_STREQ((*inner)[0].name, "prop");
  EXPECT_EQ((*inner)[0].size(), 1);
  EXPECT_STREQ((*inner)[0][0], "1337");
}

void test_parse_value_list() {
  std::string confstr =
      R"(
        prop0: "123 456";
        prop1: 123 456;
      )";

  PropertyListParser parser(confstr.c_str(), confstr.size());
  PropertyList plist;
  if (!parser.parse(&plist)) {
@@ -129,18 +178,21 @@ void test_parse_value_list() {
    std::exit(1);
  }

  EXPECT_EQ(plist.size(), 2);
  EXPECT_STREQ(plist[0].name, "prop0");
  EXPECT_STREQ(plist[0][0], "123 456");
  EXPECT_EQ(plist[0].size(), 1);
  EXPECT_STREQ(plist[0][0], "123 456");
  EXPECT_STREQ(plist[1].name, "prop1");
  EXPECT_EQ(plist[1].size(), 2);
  EXPECT_STREQ(plist[1][0], "123");
  EXPECT_STREQ(plist[1][1], "456");
  EXPECT_EQ(plist.size(), 1);
  const auto& outer = plist[0];

  EXPECT_STREQ(outer.name, "outer");
  EXPECT_EQ(outer.size(), 1);

  const auto& inner = outer[0];

  EXPECT_STREQ(inner.name, "inner");
  EXPECT_EQ(inner.size(), 1);
  EXPECT_STREQ(inner[0].name, "prop");
  EXPECT_STREQ(inner[0], "1337");
}

void test_parse_value_comma() {
void test_parse_whitespace() {
  std::string confstr =
      R"(
        prop0: 123,456;
@@ -157,30 +209,19 @@ void test_parse_value_comma() {
  }

  EXPECT_EQ(plist.size(), 4);
  EXPECT_EQ(plist[0].name, "prop0");
  EXPECT_EQ(plist[0].size(), 3);
  EXPECT_EQ(plist[0][0].is_literal, true);
  EXPECT_EQ(plist[0][1].is_literal, true);
  EXPECT_EQ(plist[0][2].is_literal, true);

  EXPECT_STREQ(plist[1].name, "prop1");
  EXPECT_EQ(plist[1].size(), 3);
  EXPECT_EQ(plist[0].size(), 2);
  EXPECT_STREQ(plist[0][0], "123");
  EXPECT_STREQ(plist[0][1], "456");
  EXPECT_STREQ(plist[1][0], "123");
  EXPECT_STREQ(plist[1][1], ",");
  EXPECT_STREQ(plist[1][2], "456");
  EXPECT_STREQ(plist[2].name, "prop2");
  EXPECT_EQ(plist[2].size(), 3);
  EXPECT_STREQ(plist[1][1], "456");
  EXPECT_STREQ(plist[2][0], "123");
  EXPECT_STREQ(plist[2][1], ",");
  EXPECT_STREQ(plist[2][2], "456");
  EXPECT_STREQ(plist[3].name, "prop3");
  EXPECT_EQ(plist[3].size(), 3);
  EXPECT_STREQ(plist[2][1], "456");
  EXPECT_STREQ(plist[3][0], "123");
  EXPECT_STREQ(plist[3][1], ",");
  EXPECT_STREQ(plist[3][2], "456");
  EXPECT_STREQ(plist[3][1], "456");
}

void test_parse_value_parens() {
void test_parse_enum() {
  std::string confstr =
      R"(
        test: blah("1337");
@@ -195,24 +236,21 @@ void test_parse_value_parens() {

  EXPECT_EQ(plist.size(), 1);
  EXPECT_STREQ(plist[0].name, "test");
  EXPECT_EQ(plist[0].size(), 4);
  EXPECT_STREQ(plist[0][0], "blah");
  EXPECT_STREQ(plist[0][1], "(");
  EXPECT_STREQ(plist[0][2], "1337");
  EXPECT_STREQ(plist[0][3], ")");
  EXPECT_EQ(plist[0][0].is_literal, true);
  EXPECT_EQ(plist[0][1].is_literal, true);
  EXPECT_EQ(plist[0][2].is_literal, false);
  EXPECT_EQ(plist[0][3].is_literal, true);
  EXPECT_EQ(plist[0].kind, PropertyKind::ENUM);
  EXPECT_STREQ(plist[0].value, "blah");
  EXPECT_EQ(plist[0].size(), 1);
  EXPECT_EQ(plist[0][0].kind, PropertyKind::VALUE);
  EXPECT_STREQ(plist[0][0], "1337");
}

int main() {
  test_parse_simple();
  test_parse_tuple();
  test_parse_tuple_list();
  test_parse_list();
  test_parse_element();
  test_parse_nested();
  test_parse_value_list();
  test_parse_value_comma();
  test_parse_value_parens();
  test_parse_whitespace();
  test_parse_enum();
  return EXIT_SUCCESS;
}