@@ -1704,6 +1704,134 @@ 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 \n foo\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+ // Here we are testing there is no error message on success
1819+ {
1820+ name : "Empty string is empty" ,
1821+ value : "" ,
1822+ expectedResult : true ,
1823+ expectedErrMsg : "" ,
1824+ },
1825+ }
1826+
1827+ for _ , tt := range tests {
1828+ tt := tt
1829+ t .Run (tt .name , func (t * testing.T ) {
1830+ mockCT := new (captureTestingT )
1831+ res := Empty (mockCT , tt .value )
1832+ mockCT .checkResultAndErrMsg (t , res , tt .expectedResult , tt .expectedErrMsg )
1833+ })
1834+ }
17071835}
17081836
17091837func TestNotEmpty (t * testing.T ) {
@@ -1726,6 +1854,68 @@ func TestNotEmpty(t *testing.T) {
17261854 True (t , NotEmpty (mockT , true ), "True value is not empty" )
17271855 True (t , NotEmpty (mockT , chWithValue ), "Channel with values is not empty" )
17281856 True (t , NotEmpty (mockT , [1 ]int {42 }), "array is not state" )
1857+
1858+ // error messages validation
1859+ tests := []struct {
1860+ name string
1861+ value interface {}
1862+ expectedResult bool
1863+ expectedErrMsg string
1864+ }{
1865+ {
1866+ name : "Empty string is empty" ,
1867+ value : "" ,
1868+ expectedResult : false ,
1869+ expectedErrMsg : `Should NOT be empty, but was ` + "\n " , // TODO FIX THIS strange error message
1870+ },
1871+ {
1872+ name : "Nil is empty" ,
1873+ value : nil ,
1874+ expectedResult : false ,
1875+ expectedErrMsg : "Should NOT be empty, but was <nil>\n " ,
1876+ },
1877+ {
1878+ name : "Empty string array is empty" ,
1879+ value : []string {},
1880+ expectedResult : false ,
1881+ expectedErrMsg : "Should NOT be empty, but was []\n " ,
1882+ },
1883+ {
1884+ name : "Zero int value is empty" ,
1885+ value : 0 ,
1886+ expectedResult : false ,
1887+ expectedErrMsg : "Should NOT be empty, but was 0\n " ,
1888+ },
1889+ {
1890+ name : "False value is empty" ,
1891+ value : false ,
1892+ expectedResult : false ,
1893+ expectedErrMsg : "Should NOT be empty, but was false\n " ,
1894+ },
1895+ {
1896+ name : "array is state" ,
1897+ value : [1 ]int {},
1898+ expectedResult : false ,
1899+ expectedErrMsg : "Should NOT be empty, but was [0]\n " ,
1900+ },
1901+
1902+ // Here we are testing there is no error message on success
1903+ {
1904+ name : "Non Empty string is not empty" ,
1905+ value : "something" ,
1906+ expectedResult : true ,
1907+ expectedErrMsg : "" ,
1908+ },
1909+ }
1910+
1911+ for _ , tt := range tests {
1912+ tt := tt
1913+ t .Run (tt .name , func (t * testing.T ) {
1914+ mockCT := new (captureTestingT )
1915+ res := NotEmpty (mockCT , tt .value )
1916+ mockCT .checkResultAndErrMsg (t , tt .expectedResult , res , tt .expectedErrMsg )
1917+ })
1918+ }
17291919}
17301920
17311921func Test_getLen (t * testing.T ) {
0 commit comments