@@ -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 \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+ {
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
17091845func 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
17311929func Test_getLen (t * testing.T ) {
0 commit comments