summaryrefslogtreecommitdiffstats
path: root/configgen/src/test/java/com/yahoo/config/codegen/DefParserPackageTest.java
blob: 4aa40ae902c11260e4a438ccabbefa5e997b49a1 (plain) (blame)
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
111
112
113
114
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.codegen;

import org.junit.jupiter.api.Test;

import java.io.IOException;

import static com.yahoo.config.codegen.DefParserTest.assertLineFails;
import static com.yahoo.config.codegen.DefParserTest.createDefTemplate;
import static com.yahoo.config.codegen.DefParserTest.createParser;
import static org.junit.jupiter.api.Assertions.*;

/**
 * Tests setting explicit java package in the def file.
 *
 * @author gjoranv
 */
public class DefParserPackageTest {
    String PACKAGE = "com.github.myproject";

    @Test
    void package_is_set_on_root_node() {
        DefParser parser = createParser("package=" + PACKAGE + "\n");
        CNode root = parser.getTree();
        assertEquals(PACKAGE, root.getPackage());
    }

    @Test
    void package_and_namespace_can_coexist() {
        String namespace = "test.namespace";
        DefParser parser = createParser("package=" + PACKAGE +
                "\nnamespace=" + namespace + "\n");
        CNode root = parser.getTree();
        assertEquals(PACKAGE, root.getPackage());
        assertEquals(namespace, root.getNamespace());
    }

    // Required by JavaClassBuilder ctor.
    @Test
    void package_is_null_when_not_explicitly_given() {
        String namespace = "test.namespace";
        DefParser parser = createParser("namespace=" + namespace + "\n");
        CNode root = parser.getTree();
        assertNull(root.getPackage());
    }

    @Test
    void uppercase_chars_are_not_allowed() {
        assertThrows(CodegenRuntimeException.class, () -> {
            createParser("package=Foo.bar\n").getTree();
        });
    }

    @Test
    void spaces_are_allowed_around_equals_sign() {
        DefParser parser = createParser("package =  " + PACKAGE + "\n");
        CNode root = parser.getTree();
        assertEquals(PACKAGE, root.getPackage());
    }

    @Test
    void empty_package_is_not_allowed() {
        assertLineFails("package");
    }

    @Test
    void consecutive_dots_are_not_allowed() {
        assertLineFails("package=a..b");
    }

    @Test
    void package_alters_def_md5() {
        DefParser parser = createParser("a string\n");
        CNode root = parser.getTree();

        parser = createParser("package=" + PACKAGE + "\na string\n");
        CNode rootWithPackage = parser.getTree();

        assertNotEquals(root.defMd5, rootWithPackage.defMd5);
    }


    @Test
    void number_is_allowed_as_non_leading_char() throws IOException, DefParser.DefParserException {
        StringBuilder sb = createDefTemplate();
        String line = "package=a.b.c2\n";
        sb.append(line);
        createParser(sb.toString()).parse();
    }

    @Test
    void number_is_not_allowed_as_package_start_char() {
        assertLineFails("package=2.a.b");
    }

    @Test
    void number_is_not_allowed_as_leading_char_in_package_token() {
        assertLineFails("package=a.b.2c");
    }

    @Test
    void underscore_in_package_is_allowed() throws IOException, DefParser.DefParserException {
        StringBuilder sb = createDefTemplate();
        String line = "package=a_b.c\n";
        sb.append(line);
        createParser(sb.toString()).parse();

        sb = createDefTemplate();
        line = "package=a_b.c_d\n";
        sb.append(line);
        createParser(sb.toString()).parse();
    }

}