Skip to content

Commit 559d23a

Browse files
committed
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 9fc264e commit 559d23a

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
@@ -1704,6 +1704,142 @@ func TestEmpty(t *testing.T) {
17041704
False(t, Empty(mockT, TString("abc")), "non-empty aliased string is empty")
17051705
False(t, Empty(mockT, xP), "ptr to non-nil value is not empty")
17061706
False(t, Empty(mockT, [1]int{42}), "array is not state")
1707+
1708+
// error messages validation
1709+
tests := []struct {
1710+
name string
1711+
value interface{}
1712+
expectedResult bool
1713+
expectedErrMsg string
1714+
}{
1715+
{
1716+
name: "Non Empty string is not empty",
1717+
value: "something",
1718+
expectedResult: false,
1719+
expectedErrMsg: "Should be empty, but was something\n",
1720+
},
1721+
{
1722+
name: "Non nil object is not empty",
1723+
value: errors.New("something"),
1724+
expectedResult: false,
1725+
expectedErrMsg: "Should be empty, but was something\n",
1726+
},
1727+
{
1728+
name: "Non empty string array is not empty",
1729+
value: []string{"something"},
1730+
expectedResult: false,
1731+
expectedErrMsg: "Should be empty, but was [something]\n",
1732+
},
1733+
{
1734+
name: "Non-zero int value is not empty",
1735+
value: 1,
1736+
expectedResult: false,
1737+
expectedErrMsg: "Should be empty, but was 1\n",
1738+
},
1739+
{
1740+
name: "True value is not empty",
1741+
value: true,
1742+
expectedResult: false,
1743+
expectedErrMsg: "Should be empty, but was true\n",
1744+
},
1745+
{
1746+
name: "Channel with values is not empty",
1747+
value: chWithValue,
1748+
expectedResult: false,
1749+
expectedErrMsg: fmt.Sprintf("Should be empty, but was %v\n", chWithValue),
1750+
},
1751+
{
1752+
name: "struct with initialized values is empty",
1753+
value: TStruct{x: 1},
1754+
expectedResult: false,
1755+
expectedErrMsg: "Should be empty, but was {1}\n",
1756+
},
1757+
{
1758+
name: "non-empty aliased string is empty",
1759+
value: TString("abc"),
1760+
expectedResult: false,
1761+
expectedErrMsg: "Should be empty, but was abc\n",
1762+
},
1763+
{
1764+
name: "ptr to non-nil value is not empty",
1765+
value: xP,
1766+
expectedResult: false,
1767+
expectedErrMsg: fmt.Sprintf("Should be empty, but was %p\n", xP),
1768+
},
1769+
{
1770+
name: "array is not state",
1771+
value: [1]int{42},
1772+
expectedResult: false,
1773+
expectedErrMsg: "Should be empty, but was [42]\n",
1774+
},
1775+
1776+
// Here are some edge cases
1777+
{
1778+
name: "string with only spaces is not empty",
1779+
value: " ",
1780+
expectedResult: false,
1781+
expectedErrMsg: "Should be empty, but was \n", // TODO FIX THIS strange error message
1782+
},
1783+
{
1784+
name: "string with a line feed is not empty",
1785+
value: "\n",
1786+
expectedResult: false,
1787+
// TODO This is the exact same error message as for an empty string
1788+
expectedErrMsg: "Should be empty, but was \n", // TODO FIX THIS strange error message
1789+
},
1790+
{
1791+
name: "string with only tabulation and lines feed is not empty",
1792+
value: "\n\t\n",
1793+
expectedResult: false,
1794+
// TODO The line feeds and tab are not helping to spot what is expected
1795+
expectedErrMsg: "" + // this syntax is used to show how errors are reported.
1796+
"Should be empty, but was \n" +
1797+
"\t\n",
1798+
},
1799+
{
1800+
name: "string with trailing lines feed is not empty",
1801+
value: "foo\n\n",
1802+
expectedResult: false,
1803+
// TODO it's not clear if one or two lines feed are expected
1804+
expectedErrMsg: "Should be empty, but was foo\n\n",
1805+
},
1806+
{
1807+
name: "string with leading and trailing tabulation and lines feed is not empty",
1808+
value: "\n\nfoo\t\n\t\n",
1809+
expectedResult: false,
1810+
// TODO The line feeds and tab are not helping to figure what is expected
1811+
expectedErrMsg: "" +
1812+
"Should be empty, but was \n" +
1813+
"\n" +
1814+
"foo\t\n" +
1815+
"\t\n",
1816+
},
1817+
1818+
{
1819+
name: "non-printable character is not empty",
1820+
value: "\u00a0", // NO-BREAK SPACE UNICODE CHARACTER
1821+
expectedResult: false,
1822+
// TODO here you cannot figure out what is expected
1823+
expectedErrMsg: "Should be empty, but was \u00a0\n",
1824+
},
1825+
1826+
// Here we are testing there is no error message on success
1827+
{
1828+
name: "Empty string is empty",
1829+
value: "",
1830+
expectedResult: true,
1831+
expectedErrMsg: "",
1832+
},
1833+
}
1834+
1835+
for _, tt := range tests {
1836+
tt := tt
1837+
t.Run(tt.name, func(t *testing.T) {
1838+
mockCT := new(captureTestingT)
1839+
res := Empty(mockCT, tt.value)
1840+
mockCT.checkResultAndErrMsg(t, res, tt.expectedResult, tt.expectedErrMsg)
1841+
})
1842+
}
17071843
}
17081844

17091845
func TestNotEmpty(t *testing.T) {
@@ -1726,6 +1862,68 @@ func TestNotEmpty(t *testing.T) {
17261862
True(t, NotEmpty(mockT, true), "True value is not empty")
17271863
True(t, NotEmpty(mockT, chWithValue), "Channel with values is not empty")
17281864
True(t, NotEmpty(mockT, [1]int{42}), "array is not state")
1865+
1866+
// error messages validation
1867+
tests := []struct {
1868+
name string
1869+
value interface{}
1870+
expectedResult bool
1871+
expectedErrMsg string
1872+
}{
1873+
{
1874+
name: "Empty string is empty",
1875+
value: "",
1876+
expectedResult: false,
1877+
expectedErrMsg: `Should NOT be empty, but was ` + "\n", // TODO FIX THIS strange error message
1878+
},
1879+
{
1880+
name: "Nil is empty",
1881+
value: nil,
1882+
expectedResult: false,
1883+
expectedErrMsg: "Should NOT be empty, but was <nil>\n",
1884+
},
1885+
{
1886+
name: "Empty string array is empty",
1887+
value: []string{},
1888+
expectedResult: false,
1889+
expectedErrMsg: "Should NOT be empty, but was []\n",
1890+
},
1891+
{
1892+
name: "Zero int value is empty",
1893+
value: 0,
1894+
expectedResult: false,
1895+
expectedErrMsg: "Should NOT be empty, but was 0\n",
1896+
},
1897+
{
1898+
name: "False value is empty",
1899+
value: false,
1900+
expectedResult: false,
1901+
expectedErrMsg: "Should NOT be empty, but was false\n",
1902+
},
1903+
{
1904+
name: "array is state",
1905+
value: [1]int{},
1906+
expectedResult: false,
1907+
expectedErrMsg: "Should NOT be empty, but was [0]\n",
1908+
},
1909+
1910+
// Here we are testing there is no error message on success
1911+
{
1912+
name: "Non Empty string is not empty",
1913+
value: "something",
1914+
expectedResult: true,
1915+
expectedErrMsg: "",
1916+
},
1917+
}
1918+
1919+
for _, tt := range tests {
1920+
tt := tt
1921+
t.Run(tt.name, func(t *testing.T) {
1922+
mockCT := new(captureTestingT)
1923+
res := NotEmpty(mockCT, tt.value)
1924+
mockCT.checkResultAndErrMsg(t, tt.expectedResult, res, tt.expectedErrMsg)
1925+
})
1926+
}
17291927
}
17301928

17311929
func Test_getLen(t *testing.T) {

0 commit comments

Comments
 (0)