Serenity Operating System
at master 71 lines 2.0 kB view raw
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}