Skip to content

Commit 6aa2fef

Browse files
ccoVeillevyas-git
authored andcommitted
check test failure message for Empty and NotEmpty
Only the tests are updated, code is unchanged. Previously, the tests were checking only the result of the asserter. Using captureTestingT helper allows to check the error message
1 parent af78cd8 commit 6aa2fef

1 file changed

Lines changed: 198 additions & 0 deletions

File tree

assert/assertions_test.go

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1792,6 +1792,142 @@ func TestEmpty(t *testing.T) {
17921792
False(t, Empty(mockT, TString("abc")), "non-empty aliased string is empty")
17931793
False(t, Empty(mockT, xP), "ptr to non-nil value is not empty")
17941794
False(t, Empty(mockT, [1]int{42}), "array is not state")
1795+
1796+
// error messages validation
1797+
tests := []struct {
1798+
name string
1799+
value interface{}
1800+
expectedResult bool
1801+
expectedErrMsg string
1802+
}{
1803+
{
1804+
name: "Non Empty string is not empty",
1805+
value: "something",
1806+
expectedResult: false,
1807+
expectedErrMsg: "Should be empty, but was something\n",
1808+
},
1809+
{
1810+
name: "Non nil object is not empty",
1811+
value: errors.New("something"),
1812+
expectedResult: false,
1813+
expectedErrMsg: "Should be empty, but was something\n",
1814+
},
1815+
{
1816+
name: "Non empty string array is not empty",
1817+
value: []string{"something"},
1818+
expectedResult: false,
1819+
expectedErrMsg: "Should be empty, but was [something]\n",
1820+
},
1821+
{
1822+
name: "Non-zero int value is not empty",
1823+
value: 1,
1824+
expectedResult: false,
1825+
expectedErrMsg: "Should be empty, but was 1\n",
1826+
},
1827+
{
1828+
name: "True value is not empty",
1829+
value: true,
1830+
expectedResult: false,
1831+
expectedErrMsg: "Should be empty, but was true\n",
1832+
},
1833+
{
1834+
name: "Channel with values is not empty",
1835+
value: chWithValue,
1836+
expectedResult: false,
1837+
expectedErrMsg: fmt.Sprintf("Should be empty, but was %v\n", chWithValue),
1838+
},
1839+
{
1840+
name: "struct with initialized values is empty",
1841+
value: TStruct{x: 1},
1842+
expectedResult: false,
1843+
expectedErrMsg: "Should be empty, but was {1}\n",
1844+
},
1845+
{
1846+
name: "non-empty aliased string is empty",
1847+
value: TString("abc"),
1848+
expectedResult: false,
1849+
expectedErrMsg: "Should be empty, but was abc\n",
1850+
},
1851+
{
1852+
name: "ptr to non-nil value is not empty",
1853+
value: xP,
1854+
expectedResult: false,
1855+
expectedErrMsg: fmt.Sprintf("Should be empty, but was %p\n", xP),
1856+
},
1857+
{
1858+
name: "array is not state",
1859+
value: [1]int{42},
1860+
expectedResult: false,
1861+
expectedErrMsg: "Should be empty, but was [42]\n",
1862+
},
1863+
1864+
// Here are some edge cases
1865+
{
1866+
name: "string with only spaces is not empty",
1867+
value: " ",
1868+
expectedResult: false,
1869+
expectedErrMsg: "Should be empty, but was \n", // TODO FIX THIS strange error message
1870+
},
1871+
{
1872+
name: "string with a line feed is not empty",
1873+
value: "\n",
1874+
expectedResult: false,
1875+
// TODO This is the exact same error message as for an empty string
1876+
expectedErrMsg: "Should be empty, but was \n", // TODO FIX THIS strange error message
1877+
},
1878+
{
1879+
name: "string with only tabulation and lines feed is not empty",
1880+
value: "\n\t\n",
1881+
expectedResult: false,
1882+
// TODO The line feeds and tab are not helping to spot what is expected
1883+
expectedErrMsg: "" + // this syntax is used to show how errors are reported.
1884+
"Should be empty, but was \n" +
1885+
"\t\n",
1886+
},
1887+
{
1888+
name: "string with trailing lines feed is not empty",
1889+
value: "foo\n\n",
1890+
expectedResult: false,
1891+
// TODO it's not clear if one or two lines feed are expected
1892+
expectedErrMsg: "Should be empty, but was foo\n\n",
1893+
},
1894+
{
1895+
name: "string with leading and trailing tabulation and lines feed is not empty",
1896+
value: "\n\nfoo\t\n\t\n",
1897+
expectedResult: false,
1898+
// TODO The line feeds and tab are not helping to figure what is expected
1899+
expectedErrMsg: "" +
1900+
"Should be empty, but was \n" +
1901+
"\n" +
1902+
"foo\t\n" +
1903+
"\t\n",
1904+
},
1905+
1906+
{
1907+
name: "non-printable character is not empty",
1908+
value: "\u00a0", // NO-BREAK SPACE UNICODE CHARACTER
1909+
expectedResult: false,
1910+
// TODO here you cannot figure out what is expected
1911+
expectedErrMsg: "Should be empty, but was \u00a0\n",
1912+
},
1913+
1914+
// Here we are testing there is no error message on success
1915+
{
1916+
name: "Empty string is empty",
1917+
value: "",
1918+
expectedResult: true,
1919+
expectedErrMsg: "",
1920+
},
1921+
}
1922+
1923+
for _, tt := range tests {
1924+
tt := tt
1925+
t.Run(tt.name, func(t *testing.T) {
1926+
mockCT := new(captureTestingT)
1927+
res := Empty(mockCT, tt.value)
1928+
mockCT.checkResultAndErrMsg(t, res, tt.expectedResult, tt.expectedErrMsg)
1929+
})
1930+
}
17951931
}
17961932

17971933
func TestNotEmpty(t *testing.T) {
@@ -1816,6 +1952,68 @@ func TestNotEmpty(t *testing.T) {
18161952
True(t, NotEmpty(mockT, true), "True value is not empty")
18171953
True(t, NotEmpty(mockT, chWithValue), "Channel with values is not empty")
18181954
True(t, NotEmpty(mockT, [1]int{42}), "array is not state")
1955+
1956+
// error messages validation
1957+
tests := []struct {
1958+
name string
1959+
value interface{}
1960+
expectedResult bool
1961+
expectedErrMsg string
1962+
}{
1963+
{
1964+
name: "Empty string is empty",
1965+
value: "",
1966+
expectedResult: false,
1967+
expectedErrMsg: `Should NOT be empty, but was ` + "\n", // TODO FIX THIS strange error message
1968+
},
1969+
{
1970+
name: "Nil is empty",
1971+
value: nil,
1972+
expectedResult: false,
1973+
expectedErrMsg: "Should NOT be empty, but was <nil>\n",
1974+
},
1975+
{
1976+
name: "Empty string array is empty",
1977+
value: []string{},
1978+
expectedResult: false,
1979+
expectedErrMsg: "Should NOT be empty, but was []\n",
1980+
},
1981+
{
1982+
name: "Zero int value is empty",
1983+
value: 0,
1984+
expectedResult: false,
1985+
expectedErrMsg: "Should NOT be empty, but was 0\n",
1986+
},
1987+
{
1988+
name: "False value is empty",
1989+
value: false,
1990+
expectedResult: false,
1991+
expectedErrMsg: "Should NOT be empty, but was false\n",
1992+
},
1993+
{
1994+
name: "array is state",
1995+
value: [1]int{},
1996+
expectedResult: false,
1997+
expectedErrMsg: "Should NOT be empty, but was [0]\n",
1998+
},
1999+
2000+
// Here we are testing there is no error message on success
2001+
{
2002+
name: "Non Empty string is not empty",
2003+
value: "something",
2004+
expectedResult: true,
2005+
expectedErrMsg: "",
2006+
},
2007+
}
2008+
2009+
for _, tt := range tests {
2010+
tt := tt
2011+
t.Run(tt.name, func(t *testing.T) {
2012+
mockCT := new(captureTestingT)
2013+
res := NotEmpty(mockCT, tt.value)
2014+
mockCT.checkResultAndErrMsg(t, tt.expectedResult, res, tt.expectedErrMsg)
2015+
})
2016+
}
18192017
}
18202018

18212019
func Test_getLen(t *testing.T) {

0 commit comments

Comments
 (0)