102030405060708090100110120135140150162172180190202212220230242252260270282292300310322332340350360370380392402412420430443452460470482490503512520530542550560570580592602612620630643652660670682692702710723732740750762772782790800810820832842852860872882890900913922930940950962970983992100010101020103210401050106010701082109211021110112211321140115011631172118011901200121212221232124012531262127012801290130213101320133013401352136213721382139214001412142214321442145014601473148214901500151015221532154215501563157215801590160016121622163216401653166216701680169017021712172217301743175217601770178017921802181218201830184018501862187218821890190019131922193019401952196219721980199320022010202020322042205220602070208020902100211121202130214021522160217021802190220222122220223122402250226222702282229123002312232023312340235023622370238123922400241024222430244024502460247124822490 module fluentasserts.core.basetype; public import fluentasserts.core.base; import fluentasserts.core.results; import std.string; import std.conv; import std.algorithm; /// When there is a lazy number that throws an it should throw that exception unittest { int someLazyInt() { throw new Exception("This is it."); } ({ someLazyInt.should.equal(3); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.greaterThan(3); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.lessThan(3); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.between(3, 4); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.approximately(3, 4); }).should.throwAnyException.withMessage("This is it."); } @("numbers equal") unittest { ({ 5.should.equal(5); 5.should.not.equal(6); }).should.not.throwAnyException; auto msg = ({ 5.should.equal(6); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should equal 6. 5 is not equal to 6."); msg = ({ 5.should.not.equal(5); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should not equal 5. 5 is equal to 5."); } @("bools equal") unittest { ({ true.should.equal(true); true.should.not.equal(false); }).should.not.throwAnyException; auto msg = ({ true.should.equal(false); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("true should equal false."); msg.split("\n")[2].strip.should.equal("Expected:false"); msg.split("\n")[3].strip.should.equal("Actual:true"); msg = ({ true.should.not.equal(true); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("true should not equal true."); msg.split("\n")[2].strip.should.equal("Expected:not true"); msg.split("\n")[3].strip.should.equal("Actual:true"); } @("numbers greater than") unittest { ({ 5.should.be.greaterThan(4); 5.should.not.be.greaterThan(6); 5.should.be.above(4); 5.should.not.be.above(6); }).should.not.throwAnyException; auto msg = ({ 5.should.be.greaterThan(5); 5.should.be.above(5); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be greater than 5. 5 is less than or equal to 5."); msg = ({ 5.should.not.be.greaterThan(4); 5.should.not.be.above(4); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should not be greater than 4. 5 is greater than 4."); } @("numbers less than") unittest { ({ 5.should.be.lessThan(6); 5.should.not.be.lessThan(4); 5.should.be.below(6); 5.should.not.be.below(4); }).should.not.throwAnyException; auto msg = ({ 5.should.be.lessThan(4); 5.should.be.below(4); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be less than 4. 5 is greater than or equal to 4."); msg.split("\n")[2].strip.should.equal("Expected:less than 4"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.not.be.lessThan(6); 5.should.not.be.below(6); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should not be less than 6. 5 is less than 6."); } @("numbers between") unittest { ({ 5.should.be.between(4, 6); 5.should.be.between(6, 4); 5.should.not.be.between(5, 6); 5.should.not.be.between(4, 5); 5.should.be.within(4, 6); 5.should.be.within(6, 4); 5.should.not.be.within(5, 6); 5.should.not.be.within(4, 5); }).should.not.throwAnyException; auto msg = ({ 5.should.be.between(5, 6); 5.should.be.within(5, 6); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be between 5 and 6. 5 is less than or equal to 5."); msg.split("\n")[2].strip.should.equal("Expected:a value inside (5, 6) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.be.between(4, 5); 5.should.be.within(4, 5); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be between 4 and 5. 5 is greater than or equal to 5."); msg.split("\n")[2].strip.should.equal("Expected:a value inside (4, 5) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.not.be.between(4, 6); 5.should.not.be.within(4, 6); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.equal("5 should not be between 4 and 6."); msg.split("\n")[2].strip.should.equal("Expected:a value outside (4, 6) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.not.be.between(6, 4); 5.should.not.be.within(6, 4); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.equal("5 should not be between 6 and 4."); msg.split("\n")[2].strip.should.equal("Expected:a value outside (4, 6) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); } /// numbers approximately unittest { ({ (10f/3f).should.be.approximately(3, 0.34); (10f/3f).should.not.be.approximately(3, 0.1); }).should.not.throwAnyException; auto msg = ({ (10f/3f).should.be.approximately(3, 0.1); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.contain("(10f/3f) should be approximately 3±0.1."); msg.split("\n")[2].strip.should.contain("Expected:3±0.1"); msg.split("\n")[3].strip.should.contain("Actual:3.33333"); msg = ({ (10f/3f).should.not.be.approximately(3, 0.34); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.contain("(10f/3f) should not be approximately 3±0.34."); msg.split("\n")[2].strip.should.contain("Expected:not 3±0.34"); msg.split("\n")[3].strip.should.contain("Actual:3.33333"); } /// should throw exceptions for delegates that return basic types unittest { int value() { throw new Exception("not implemented value"); } void voidValue() { throw new Exception("nothing here"); } void noException() { } value().should.throwAnyException.withMessage.equal("not implemented value"); voidValue().should.throwAnyException.withMessage.equal("nothing here"); bool thrown; try { noException.should.throwAnyException; } catch (TestException e) { e.msg.should.startWith("noException should throw any exception. No exception was thrown."); thrown = true; } thrown.should.equal(true); thrown = false; try { voidValue().should.not.throwAnyException; } catch(TestException e) { thrown = true; e.msg.split("\n")[0].should.equal("voidValue() should not throw any exception. `object.Exception` saying `nothing here` was thrown."); } thrown.should.equal(true); } /// it should compile const comparison unittest { const actual = 42; actual.should.equal(42); }
module fluentasserts.core.basetype; public import fluentasserts.core.base; import fluentasserts.core.results; import std.string; import std.conv; import std.algorithm; /// When there is a lazy number that throws an it should throw that exception unittest { int someLazyInt() { throw new Exception("This is it."); } ({ someLazyInt.should.equal(3); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.greaterThan(3); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.lessThan(3); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.between(3, 4); }).should.throwAnyException.withMessage("This is it."); ({ someLazyInt.should.be.approximately(3, 4); }).should.throwAnyException.withMessage("This is it."); } @("numbers equal") unittest { ({ 5.should.equal(5); 5.should.not.equal(6); }).should.not.throwAnyException; auto msg = ({ 5.should.equal(6); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should equal 6. 5 is not equal to 6."); msg = ({ 5.should.not.equal(5); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should not equal 5. 5 is equal to 5."); } @("bools equal") unittest { ({ true.should.equal(true); true.should.not.equal(false); }).should.not.throwAnyException; auto msg = ({ true.should.equal(false); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("true should equal false."); msg.split("\n")[2].strip.should.equal("Expected:false"); msg.split("\n")[3].strip.should.equal("Actual:true"); msg = ({ true.should.not.equal(true); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("true should not equal true."); msg.split("\n")[2].strip.should.equal("Expected:not true"); msg.split("\n")[3].strip.should.equal("Actual:true"); } @("numbers greater than") unittest { ({ 5.should.be.greaterThan(4); 5.should.not.be.greaterThan(6); 5.should.be.above(4); 5.should.not.be.above(6); }).should.not.throwAnyException; auto msg = ({ 5.should.be.greaterThan(5); 5.should.be.above(5); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be greater than 5. 5 is less than or equal to 5."); msg = ({ 5.should.not.be.greaterThan(4); 5.should.not.be.above(4); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should not be greater than 4. 5 is greater than 4."); } @("numbers less than") unittest { ({ 5.should.be.lessThan(6); 5.should.not.be.lessThan(4); 5.should.be.below(6); 5.should.not.be.below(4); }).should.not.throwAnyException; auto msg = ({ 5.should.be.lessThan(4); 5.should.be.below(4); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be less than 4. 5 is greater than or equal to 4."); msg.split("\n")[2].strip.should.equal("Expected:less than 4"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.not.be.lessThan(6); 5.should.not.be.below(6); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should not be less than 6. 5 is less than 6."); } @("numbers between") unittest { ({ 5.should.be.between(4, 6); 5.should.be.between(6, 4); 5.should.not.be.between(5, 6); 5.should.not.be.between(4, 5); 5.should.be.within(4, 6); 5.should.be.within(6, 4); 5.should.not.be.within(5, 6); 5.should.not.be.within(4, 5); }).should.not.throwAnyException; auto msg = ({ 5.should.be.between(5, 6); 5.should.be.within(5, 6); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be between 5 and 6. 5 is less than or equal to 5."); msg.split("\n")[2].strip.should.equal("Expected:a value inside (5, 6) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.be.between(4, 5); 5.should.be.within(4, 5); }).should.throwException!TestException.msg; msg.split("\n")[0].should.equal("5 should be between 4 and 5. 5 is greater than or equal to 5."); msg.split("\n")[2].strip.should.equal("Expected:a value inside (4, 5) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.not.be.between(4, 6); 5.should.not.be.within(4, 6); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.equal("5 should not be between 4 and 6."); msg.split("\n")[2].strip.should.equal("Expected:a value outside (4, 6) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); msg = ({ 5.should.not.be.between(6, 4); 5.should.not.be.within(6, 4); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.equal("5 should not be between 6 and 4."); msg.split("\n")[2].strip.should.equal("Expected:a value outside (4, 6) interval"); msg.split("\n")[3].strip.should.equal("Actual:5"); } /// numbers approximately unittest { ({ (10f/3f).should.be.approximately(3, 0.34); (10f/3f).should.not.be.approximately(3, 0.1); }).should.not.throwAnyException; auto msg = ({ (10f/3f).should.be.approximately(3, 0.1); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.contain("(10f/3f) should be approximately 3±0.1."); msg.split("\n")[2].strip.should.contain("Expected:3±0.1"); msg.split("\n")[3].strip.should.contain("Actual:3.33333"); msg = ({ (10f/3f).should.not.be.approximately(3, 0.34); }).should.throwException!TestException.msg; msg.split("\n")[0].strip.should.contain("(10f/3f) should not be approximately 3±0.34."); msg.split("\n")[2].strip.should.contain("Expected:not 3±0.34"); msg.split("\n")[3].strip.should.contain("Actual:3.33333"); } /// should throw exceptions for delegates that return basic types unittest { int value() { throw new Exception("not implemented value"); } void voidValue() { throw new Exception("nothing here"); } void noException() { } value().should.throwAnyException.withMessage.equal("not implemented value"); voidValue().should.throwAnyException.withMessage.equal("nothing here"); bool thrown; try { noException.should.throwAnyException; } catch (TestException e) { e.msg.should.startWith("noException should throw any exception. No exception was thrown."); thrown = true; } thrown.should.equal(true); thrown = false; try { voidValue().should.not.throwAnyException; } catch(TestException e) { thrown = true; e.msg.split("\n")[0].should.equal("voidValue() should not throw any exception. `object.Exception` saying `nothing here` was thrown."); } thrown.should.equal(true); } /// it should compile const comparison unittest { const actual = 42; actual.should.equal(42); }