aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/helpers/CompareConfigTestHelper.java
blob: ba759a753b3dd1d25a2db27b5eb90483f4656187 (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
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package helpers;

import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.yahoo.io.IOUtils;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

/**
 * @author Vegard Sjonfjell
 */
public class CompareConfigTestHelper {

    public static void assertSerializedConfigFileEquals(String filename, String actual) throws IOException {
        IOUtils.writeFile(filename + ".actual", actual, false);
        if (! actual.endsWith("\n")) {
            IOUtils.writeFile(filename + ".actual", "\n", true);
        }
        assertSerializedConfigEquals(IOUtils.readFile(new File(filename)), actual, false);
    }

    // Written this way to compare order independently but output error with order preserved
    // Note that this means that if a test fails you'll also see spurious differences in the comparison
    // from lines which are present in both but at different locations.
    public static void assertSerializedConfigEquals(String expected, String actual, boolean orderMatters) {
        if (orderMatters) {
            assertEquals(expected.trim(), actual.trim());
        }
        else {
            if (!sortLines(expected.trim()).equals(sortLines(actual.trim())))
                assertEquals(expected, actual);
        }
    }

    private static String sortLines(String fileData) {
        final List<String> lines = Lists.newArrayList(Splitter.on('\n').split(fileData));
        Collections.sort(lines);
        return Joiner.on('\n').join(lines);
    }

}