File: test_tokenizer.cc

package info (click to toggle)
logserver 1.13.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 720 kB
  • sloc: cpp: 10,815; makefile: 3
file content (110 lines) | stat: -rw-r--r-- 2,818 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "test.h"

#include "tokenizer.h"

TEST_CASE("trim") {
	CHECK(Tokenizer::trim("  abc  ") == "abc");
	CHECK(Tokenizer::trim("abcd ") == "abcd");
	CHECK(Tokenizer::trim("ab  cd") == "ab  cd");
	CHECK(Tokenizer::trim("abc") == "abc");
	CHECK(Tokenizer::trim("  bcd") == "bcd");
	CHECK(Tokenizer::trim("  \tbcd\t") == "bcd");
	CHECK(Tokenizer::trim("a,b,c", "ac") == ",b,");
	CHECK(Tokenizer::trim("a b c", "ac") == " b ");
	CHECK(Tokenizer::trim("a,b,c", ",ac") == "b");
}

TEST_CASE("extract") {
	int i, j;
	float f;
	string s, t;
	bool b;

	int ret;

	ret = Tokenizer::extract("%=%", "val=true", &s, &b);
	CHECK(ret == 2);
	CHECK(s == "val");
	CHECK(b);

	ret = Tokenizer::extract("%=%", "0=false", &s, &b);
	CHECK(ret == 2);
	CHECK(s == "0");
	CHECK(!b);

	ret = Tokenizer::extract("%+2=%", "1+2=3 ", &i, &j);
	CHECK(ret == 2);
	CHECK(i == 1);
	CHECK(j == 3);

	j = -1;
	ret = Tokenizer::extract("%-2=%", "1+2=3 ", &i, &j);
	CHECK(ret == 1);
	CHECK(i == 1);
	CHECK(j == -1);

	ret = Tokenizer::extract("%&%=%&%", "query?a=b&c=0.34&d=e",
				 nullptr, &s, &f, nullptr);
	CHECK(ret == 4);
	CHECK(s == "c");
	CHECK(f == 0.34f);

	ret = Tokenizer::extract("function(%, %)", "function(parm1, parm2)",
				 &s, &t);
	CHECK(ret == 2);
	CHECK(s == "parm1");
	CHECK(t == "parm2");
}

TEST_CASE("annotate quote") {
	string rt = "__________\"'''''''''''\"_________________";
	string in = "this is a \"string with\" some quoted part";
	string out;
	Tokenizer::annotate_quote(in, &out);
	CHECK(out == rt);
}

TEST_CASE("annotate multi quote") {
	string rt = "________\"'\"________\"''''\"_\"'''''''''''\"";
	string in = "this is \"a\" string \"with\" \"some quotes\"";
	string out;
	Tokenizer::annotate_quote(in, &out);
	CHECK(out == rt);
}

TEST_CASE("split mind quote") {
	string in = "this,can,\"be,split\",fine";
	vector<string> out = {"this", "can", "\"be,split\"", "fine"};
	vector<string_view> ret;
	Tokenizer::split_mind_quote(in, ",", &ret);
	CHECK(ret.size() == out.size());
	for (size_t i = 0; i < ret.size(); ++i) {
		CHECK(ret[i] == out[i]);
	}
}

TEST_CASE("split mind quote no quotes") {
	string in = "this,can,be,split,fine";
	vector<string> out = {"this", "can", "be", "split", "fine"};
	vector<string_view> ret;
	Tokenizer::split_mind_quote(in, ",", &ret);
	CHECK(ret.size() == out.size());
	for (size_t i = 0; i < ret.size(); ++i) {
		CHECK(ret[i] == out[i]);
	}
}

TEST_CASE("split mind quote multi") {
	string in = "this-\"can-be-split\"-\"just-fine\"";
	vector<string> out = {"this", "\"can-be-split\"", "\"just-fine\""};
	vector<string_view> ret;
	Tokenizer::split_mind_quote(in, "-", &ret);
	CHECK(ret.size() == out.size());
	for (size_t i = 0; i < ret.size(); ++i) {
		CHECK(ret[i] == out[i]);
	}
}

/* TODO: tests for the rest of tokenizer, however this covers the functions
 * logserver uses */