Skip to content

Commit a5d5c33

Browse files
authored
Merge pull request #1745 from ccoveille-forks/improve-tests-empty-notempty
assert: check test failure message for Empty and NotEmpty
2 parents 0ff4bb4 + 559d23a commit a5d5c33

File tree

1 file changed

+198
-0
lines changed

1 file changed

+198
-0
lines changed

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)