1 package com.opencsv.validators;
2
3 import com.opencsv.exceptions.CsvValidationException;
4 import org.junit.jupiter.api.Assertions;
5 import org.junit.jupiter.api.BeforeEach;
6 import org.junit.jupiter.api.DisplayName;
7 import org.junit.jupiter.api.Test;
8
9 import static org.junit.jupiter.api.Assertions.assertFalse;
10 import static org.junit.jupiter.api.Assertions.assertTrue;
11
12 public class RowMustHaveSameNumberOfColumnsAsFirstRowValidatorTest {
13 private static final String[] FOUR_COLUMNS = {"one", "two", "three", "four"};
14 private static final String[] THREE_COLUMNS = {"one", "two", "three"};
15 private static final String[] TWO_COLUMNS = {"one", "two"};
16 private static final String[] NO_COLUMNS = {};
17 private static final String[] NULL_ROW = null;
18 private RowValidator validator;
19
20 @BeforeEach
21 public void setup() {
22 validator = new RowMustHaveSameNumberOfColumnsAsFirstRowValidator();
23 }
24
25 @Test
26 @DisplayName("RowValidator isValid with three rows first")
27 public void isValidThreeRowsFirst() {
28 assertTrue(validator.isValid(THREE_COLUMNS));
29 assertTrue(validator.isValid(THREE_COLUMNS));
30 assertFalse(validator.isValid(TWO_COLUMNS));
31 assertFalse(validator.isValid(NO_COLUMNS));
32 assertFalse(validator.isValid(NULL_ROW));
33 assertFalse(validator.isValid(FOUR_COLUMNS));
34 assertTrue(validator.isValid(THREE_COLUMNS));
35 }
36
37 @Test
38 @DisplayName("RowValidator validate with three rows first")
39 public void validateThreeRowsFirst() {
40 Assertions.assertDoesNotThrow(() -> validator.validate(THREE_COLUMNS));
41 Assertions.assertDoesNotThrow(() -> validator.validate(THREE_COLUMNS));
42 Assertions.assertThrows(CsvValidationException.class, () -> validator.validate(FOUR_COLUMNS));
43 Assertions.assertThrows(CsvValidationException.class, () -> validator.validate(TWO_COLUMNS));
44 Assertions.assertThrows(CsvValidationException.class, () -> validator.validate(NO_COLUMNS));
45 Assertions.assertThrows(CsvValidationException.class, () -> validator.validate(NULL_ROW));
46 Assertions.assertDoesNotThrow(() -> validator.validate(THREE_COLUMNS));
47 }
48
49 @Test
50 @DisplayName("RowValidator isValid with null first row")
51 public void isValidNullFirstRow() {
52 assertFalse(validator.isValid(NULL_ROW));
53 }
54
55 @Test
56 @DisplayName("RowValidator isValid with empty first row")
57 public void isValidEmptyFirstRow() {
58 assertFalse(validator.isValid(NO_COLUMNS));
59 }
60
61 @Test
62 @DisplayName("RowValidator validate with null first row")
63 public void validateNullFirstRow() {
64 Assertions.assertThrows(CsvValidationException.class, () -> validator.validate(NULL_ROW));
65 }
66
67 @Test
68 @DisplayName("RowValidator validate with empty first row")
69 public void validateEmptyFirstRow() {
70 Assertions.assertThrows(CsvValidationException.class, () -> validator.validate(NO_COLUMNS));
71 }
72 }