1 import std.array:array, appender;
2 import std.stdio:stderr;
3 stderr.writeln("Running unittest for unDecorateComment...");
4
5 string[] inputs = [
6 "/***************\n*******************/",
7 "/***************\n *\n ******************/",
8 "/**\n*/",
9 "/** */",
10 "/***/",
11 "/******/",
12 "/** abcde1 */",
13 "/// abcde2\n/// abcde2",
14 "/**\n * stuff1\n */",
15 "/**\n *\n * stuff2\n */",
16 "/**\n *\n * stuff3\n *\n */",
17 "/**\n *\n * stuff4\n *\n*/",
18 "/**\n * abcde3\n * abcde3 \n */",
19 "/**\n * abcde4\n *\n * abcde4\n */",
20 "/**abcde5\n*abcde5\n*/",
21 "/** abcde6\n * abcde6\n*/",
22 "/**\n1\n\n\n\n*/",
23 "/**\r\n1\r\n\r\n\r\n\r\n*/",
24 "/**\na1\n\na2\n\n*/",
25 "/**b1\n*b2\n*b3*/",
26 "/**c1\n *c2\n *c3*/",
27 "/**d1\n *d2\n *d3\n*/",
28 "///a\fbc\n///def"
29 ];
30 string[] outputs = [
31 "",
32 "",
33 "",
34 "",
35 "",
36 "",
37 "abcde1",
38 "abcde2\nabcde2",
39 "stuff1",
40 "stuff2",
41 "stuff3",
42 "stuff4",
43 "abcde3\n abcde3",
44 "abcde4\n\nabcde4",
45 "abcde5\nabcde5",
46 "abcde6\nabcde6",
47 "1",
48 "1",
49 "a1\n\na2",
50 "b1\nb2\nb3",
51 "c1\nc2\nc3",
52 "d1\nd2\nd3",
53 "a\fbc\ndef"
54 ];
55
56 // tests where * and + are not interchangeable
57 string[2][] np =
58 [
59 ["/**\n * d1\n d2\n */", "* d1\nd2"],
60 ["/**\n + d1\n d2\n */", "+ d1\nd2"],
61 ["/**d1\n\n\n*d2\n*/", "d1\n\n*d2"],
62 ];
63
64 assert(inputs.length == outputs.length);
65 foreach (pair; zip(inputs, outputs))
66 {
67 foreach (b; [true, false])
68 {
69 auto app = appender!string();
70 unDecorateComment(b ? pair[0] : pair[0].replace("*", "+"), app);
71 assert(pair[1] == app.data, "[[" ~ pair[0] ~ "]] => [[" ~ app.data ~ "]]");
72 }
73 }
74 foreach (pair; np)
75 {
76 auto app = appender!string();
77 unDecorateComment(pair[0], app);
78 assert(pair[1] == app.data, "[[" ~ pair[0] ~ "]] => [[" ~ app.data ~ "]]");
79 }
80 stderr.writeln("Unittest for unDecorateComment passed.");
Removes "decoration" such as leading whitespace, leading + and * characters, and places the result into the given output range