aboutsummaryrefslogtreecommitdiffstats
path: root/config/src/test/java/com/yahoo/vespa/config/DefaultValueApplierTest.java
blob: 6851e725b7daed7a8af2f32d047cd2ba73e8a9bf (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
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config;

import com.yahoo.config.codegen.DefParser;
import com.yahoo.config.codegen.InnerCNode;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.slime.Type;
import org.junit.Test;

import java.io.StringReader;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

/**
 * @author Ulf Lilleengen
 */
public class DefaultValueApplierTest {

    public Slime apply(Slime slime, String ... extraFields) {
        StringBuilder defBuilder = new StringBuilder();
        defBuilder.append("namespace=test").append("\n");
        defBuilder.append("str string").append("\n");
        for (String field : extraFields) {
            defBuilder.append(field).append("\n");
        }
        Cursor cursor = slime.get();
        cursor.setString("str", "myvalue");
        InnerCNode def = new DefParser("simpletypes", new StringReader(defBuilder.toString())).getTree();
        DefaultValueApplier applier = new DefaultValueApplier();
        return applier.applyDefaults(slime, def);
    }

    public Slime apply(String ... extraFields) {
        Slime slime = new Slime();
        slime.setObject();
        return apply(slime, extraFields);
    }

    @Test
    public void require_that_simple_defaults_are_applied() {
        Slime slime = apply("strdef string default=\"foo\"");
        assertTrue(slime.get().field("str").valid());
        assertEquals("myvalue", slime.get().field("str").asString());
        assertTrue(slime.get().field("strdef").valid());
        assertEquals("foo", slime.get().field("strdef").asString());

    }

    @Test
    public void require_that_struct_fields_defaults_are_applied() {
        Slime slime = apply("nested.str string default=\"bar\"");
        assertTrue(slime.get().field("nested").valid());
        assertTrue(slime.get().field("nested").field("str").valid());
        assertEquals("bar", slime.get().field("nested").field("str").asString());
    }

    @Test
    public void require_that_arrays_of_struct_fields_defaults_are_applied() {
        Slime payload = new Slime();
        Cursor cursor = payload.setObject();
        cursor.setArray("nestedarr").addObject().setString("foo", "myfoo");
        Slime slime = apply(payload, "nestedarr[].foo string", "nestedarr[].bar string default=\"bim\"");

        assertTrue(slime.get().field("nestedarr").valid());
        assertEquals(1, slime.get().field("nestedarr").entries());
        assertTrue(slime.get().field("nestedarr").entry(0).field("foo").valid());
        assertEquals("myfoo", slime.get().field("nestedarr").entry(0).field("foo").asString());
        assertTrue(slime.get().field("nestedarr").entry(0).field("bar").valid());
        assertEquals("bim", slime.get().field("nestedarr").entry(0).field("bar").asString());
    }

    @Test
    public void require_that_arrays_of_struct_fields_defaults_when_empty() {
        Slime payload = new Slime();
        payload.setObject();
        Slime slime = apply(payload, "nestedarr[].foo string", "nestedarr[].bar string default=\"bim\"");

        assertTrue(slime.get().field("nestedarr").valid());
        assertEquals(0, slime.get().field("nestedarr").entries());
        assertEquals(Type.ARRAY, slime.get().field("nestedarr").type());
    }

    @Test
    public void require_that_maps_of_struct_fields_defaults_are_applied() {
        Slime payload = new Slime();
        Cursor cursor = payload.setObject();
        cursor.setObject("nestedmap").setObject("mykey").setString("foo", "myfoo");
        Slime slime = apply(payload, "nestedmap{}.foo string", "nestedmap{}.bar string default=\"bim\"");

        assertTrue(slime.get().field("nestedmap").valid());
        assertEquals(1, slime.get().field("nestedmap").fields());
        assertTrue(slime.get().field("nestedmap").field("mykey").field("foo").valid());
        assertEquals("myfoo", slime.get().field("nestedmap").field("mykey").field("foo").asString());
        assertTrue(slime.get().field("nestedmap").field("mykey").field("bar").valid());
        assertEquals("bim", slime.get().field("nestedmap").field("mykey").field("bar").asString());
    }
}