Serenity Operating System
1/*
2 * Copyright (c) 2020, the SerenityOS developers.
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <LibTest/TestCase.h>
8
9#include <AK/SourceGenerator.h>
10
11TEST_CASE(wrap_builder)
12{
13 StringBuilder builder;
14 SourceGenerator generator { builder };
15
16 generator.append("Hello, World!");
17
18 EXPECT_EQ(builder.string_view(), "Hello, World!");
19}
20
21TEST_CASE(generate_c_code)
22{
23 StringBuilder builder;
24 SourceGenerator generator { builder };
25 generator.set("name", "foo");
26
27 generator.append("const char* @name@ (void) { return \"@name@\"; }");
28
29 EXPECT_EQ(generator.as_string_view(), "const char* foo (void) { return \"foo\"; }");
30}
31
32TEST_CASE(scoped)
33{
34 StringBuilder builder;
35 SourceGenerator global_generator { builder };
36
37 global_generator.append("\n");
38
39 global_generator.set("foo", "foo-0");
40 global_generator.set("bar", "bar-0");
41 global_generator.append("@foo@ @bar@\n"); // foo-0 bar-0
42
43 {
44 auto scoped_generator_1 = global_generator.fork();
45 scoped_generator_1.set("bar", "bar-1");
46 global_generator.append("@foo@ @bar@\n"); // foo-0 bar-0
47 }
48
49 global_generator.append("@foo@ @bar@\n"); // foo-0 bar-0
50
51 {
52 auto scoped_generator_2 = global_generator.fork();
53 scoped_generator_2.set("foo", "foo-2");
54 scoped_generator_2.append("@foo@ @bar@\n"); // foo-2 bar-0
55
56 {
57 auto scoped_generator_3 = scoped_generator_2.fork();
58 scoped_generator_3.set("bar", "bar-3");
59 scoped_generator_3.append("@foo@ @bar@\n"); // foo-2 bar-3
60 }
61
62 {
63 auto scoped_generator_4 = global_generator.fork();
64 scoped_generator_4.append("@foo@ @bar@\n"); // foo-0 bar-0
65 }
66
67 scoped_generator_2.append("@foo@ @bar@\n"); // foo-2 bar-0
68 }
69
70 EXPECT_EQ(global_generator.as_string_view(), "\nfoo-0 bar-0\nfoo-0 bar-0\nfoo-0 bar-0\nfoo-2 bar-0\nfoo-2 bar-3\nfoo-0 bar-0\nfoo-2 bar-0\n");
71}