• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

database-rider / database-rider / #917

24 Jan 2026 11:44AM UTC coverage: 84.22% (-0.04%) from 84.262%
#917

push

web-flow
add detailed error message for Operation.CONTAINS (#628)

Co-authored-by: Rafael Pestano <rmpestano@gmail.com>

66 of 80 new or added lines in 4 files covered. (82.5%)

1 existing line in 1 file now uncovered.

3197 of 3796 relevant lines covered (84.22%)

0.84 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.83
/rider-core/src/main/java/com/github/database/rider/core/util/DefaultContainsErrorMessage.java
1
package com.github.database.rider.core.util;
2

3
import org.dbunit.dataset.DataSetException;
4
import org.dbunit.dataset.ITable;
5

6
import java.util.ArrayList;
7
import java.util.List;
8

9
public class DefaultContainsErrorMessage implements ContainsErrorMessage {
10

11
    private static final String COLUMN_DELIMITER = "  | ";
12
    private final List<String> columnNames;
13
    private List<Object> values;
14
    private List<Integer> columnWidths;
15
    private final ITable originalTable;
16
    private StringBuilder buffer;
17
    private boolean match = false;
1✔
18

19
    public DefaultContainsErrorMessage(List<String> columnNames, ITable originalTable) {
1✔
20
        this.columnNames = columnNames;
1✔
21
        this.originalTable = originalTable;
1✔
22
    }
1✔
23

24
    @Override
25
    public void initWithValues(List<Object> values) throws DataSetException {
26
        buffer = new StringBuilder();
1✔
27
        this.match = false;
1✔
28
        this.values = values;
1✔
29
        final int rowCount = originalTable.getRowCount();
1✔
30
        final List<Integer> widths = new ArrayList<>();
1✔
31
        for (int i = 0; i < columnNames.size(); i++) {
1✔
32
            int width = Math.max(columnNames.get(i).length(), String.valueOf(values.get(i)).length());
1✔
33
            for (int r = 0; r < rowCount; r++) {
1✔
34
                final Object value = originalTable.getValue(r, columnNames.get(i));
1✔
35
                width = Math.max(width, String.valueOf(value).length());
1✔
36
            }
37
            widths.add(width);
1✔
38
        }
39
        this.columnWidths = widths;
1✔
40
    }
1✔
41

42
    @Override
43
    public void addTableHeader() {
44
        final int rowWidth = columnWidths.stream().mapToInt(integer -> integer + COLUMN_DELIMITER.length()).sum();
1✔
45
        final String delimiterLine = repeat("-", rowWidth) + "\n";
1✔
46
        buffer.append(delimiterLine);
1✔
47
        buffer.append(String.format(" Table '%s'%n", originalTable.getTableMetaData().getTableName()));
1✔
48
        buffer.append(delimiterLine);
1✔
49
        for (int i = 0; i < columnWidths.size(); i++) {
1✔
50
            final Integer columnWidth = columnWidths.get(i);
1✔
51
            final String columnName = columnNames.get(i);
1✔
52
            addValue(columnName, columnWidth);
1✔
53
        }
54
        nextLine();
1✔
55
        buffer.append(delimiterLine);
1✔
56
        for (int i = 0; i < columnWidths.size(); i++) {
1✔
57
            final Integer columnWidth = columnWidths.get(i);
1✔
58
            final String value = String.valueOf(values.get(i));
1✔
59
            addValue(value, columnWidth);
1✔
60
        }
61
        buffer.append(" Expected values\n\n");
1✔
62
    }
1✔
63

64
    private String repeat(String string, int times) {
65
        final StringBuilder sb = new StringBuilder();
1✔
66
        for (int i = 0; i < times; i++) {
1✔
67
            sb.append(string);
1✔
68
        }
69
        return sb.toString();
1✔
70
    }
71

72
    private void addValue(String value, Integer columnWidth) {
73
        buffer.append(value).append(repeat(" ", columnWidth - value.length())).append(COLUMN_DELIMITER);
1✔
74
    }
1✔
75

76
    @Override
77
    public void addRow(int row) throws DataSetException {
78
        for (int i = 0; i < columnWidths.size(); i++) {
1✔
79
            final Integer length = columnWidths.get(i);
1✔
80
            final String value = String.valueOf(originalTable.getValue(row, columnNames.get(i)));
1✔
81
            addValue(value, length);
1✔
82
        }
83
    }
1✔
84

85
    @Override
86
    public void addFail(int column, int row) throws DataSetException {
87
        final String columnName = columnNames.get(column);
1✔
88
        buffer.append(String.format(" Failed in '%s' Expected: '%s' Actual: '%s'",
1✔
89
                   columnName,
90
                   values.get(column),
1✔
91
                   originalTable.getValue(row, columnName)));
1✔
92
    }
1✔
93

94
    @Override
95
    public void setMatch() {
96
        match = true;
1✔
97
    }
1✔
98

99
    @Override
100
    public void nextLine() {
101
        buffer.append("\n");
1✔
102
    }
1✔
103

104
    @Override
105
    public void print() {
NEW
106
        if (!match) {
×
NEW
107
            logger.error("Mismatch found:\n" + buffer.toString());
×
108
        }
NEW
109
    }
×
110

111
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc