root/trunk/src/semitwist/apps/tests/deferAssertTest/main.d

Revision 232, 3.4 kB (checked in by Abscissa, 3 years ago)

DMD 2.055 compatibility.

  • Property svn:eol-style set to native
Line 
1 // SemiTwist D Tools
2 // Tests: Defer Assert Test
3 // Written in the D programming language.
4
5 /++
6 Author:
7 $(WEB www.semitwist.com, Nick Sabalausky)
8
9 Make sure to pass "-debug=deferAssertTest_unittest" to DMD.
10
11 This has been tested to work with DMD 2.052 through 2.055
12 +/
13
14 module semitwist.apps.tests.deferAssertTest.main;
15
16 import semitwist.util.all;
17
18 void main()
19 {
20     flushAsserts();
21     // Main program code here
22 }
23
24 alias unittestSection!"deferAssertTest_unittest" unittestDeferAssertTest;
25
26 mixin(unittestDeferAssertTest(q{
27
28     int foo = 2;
29     string bar = "hello";
30
31     bool throwsException()
32     {
33         throw new Exception("Some exception");
34     }
35    
36     // Improvement to mixin syntax would be nice.
37     // Also, my editor doesn't know that backticks indicate a string,
38     // so it's still properly highlighted as code :)
39     //mixin(deferAssert!(`foo == 3 || foo > 5`, "foo is bad"));
40     assertPred!("a == 3 || a > 5", "foo is bad")(foo);
41    
42     //mixin(deferAssert!(`2 + 2 == 4`, "Basic arithmetic"));
43     //assertPred!(q{ 2 + 2 == a }, "Basic arithmetic")(4);
44     assertPred!"+"(2, 2, 4, "Basic arithmetic");
45     assertPred!"+"(2, 2, 5, "Bad arithmetic");
46    
47     //mixin(deferAssert!(`false`));
48     assertPred!"a"(false);
49
50     //mixin(deferAssert!(`throwsException()`, "Exceptions are handled"));
51 //  assertPred!q{ throwsException() }(null, "Exceptions are handled");
52     //assertPred!(q{ a }, "Exceptions are handled")(throwsException());
53    
54     mixin(deferEnsure!(`foo`, `_ == 3 || _ > 5`, "ensure foo failed"));
55     mixin(deferEnsure!(`foo`, `_ > 0`));
56     mixin(deferEnsure!(`bar`, `_ == "hola"`));
57     mixin(deferEnsure!(`2+2`, `_ == 4`));
58     mixin(deferEnsure!(`throwsException()`, `!_`, "Exceptions are handled"));
59     mixin(deferEnsure!(`false`, `_ == throwsException()`, "Exceptions are handled"));
60    
61     mixin(deferEnsureThrows!(`throw new Exception("Hello");`, Exception));
62     //mixin(deferEnsureThrows!(`throw new Object();`, Exception, "Wrong type thrown!"));
63     //mixin(deferEnsureThrows!(`throw new Exception("Hello");`, Object, "Wrong type thrown!"));
64
65 }));
66
67 /++
68 Program output:
69
70 src\semitwist\apps\tests\deferAssertTest\main.d(36): Assert Failed (foo == 3 || foo > 5): foo is bad
71 src\semitwist\apps\tests\deferAssertTest\main.d(38): Assert Failed (false)
72 src\semitwist\apps\tests\deferAssertTest\main.d(39): Assert Threw (throwsException()): Exceptions are handled:
73 Threw: object.Exception: Some exception
74 src\semitwist\apps\tests\deferAssertTest\main.d(41): Ensure Failed: ensure foo failed
75 Expression 'foo':
76 Expected: _ == 3 || _ > 5
77 Actual: 2
78 src\semitwist\apps\tests\deferAssertTest\main.d(43): Ensure Failed
79 Expression 'bar':
80 Expected: _ == "hola"
81 Actual: hello
82 src\semitwist\apps\tests\deferAssertTest\main.d(45): Ensure Threw: Exceptions are handled:
83 Expression 'throwsException()':
84 Expected: !_
85 Threw: object.Exception: Some exception
86 src\semitwist\apps\tests\deferAssertTest\main.d(46): Ensure Threw: Exceptions are handled:
87 Expression 'false':
88 Expected: _ == throwsException()
89 Threw: object.Exception: Some exception
90 src\semitwist\apps\tests\deferAssertTest\main.d(49): Ensure Throw Failed: Wrong type thrown!
91 Statement 'throw new Object();':
92 Expected: object.Exception
93 Actual:   object.Object: object.Object
94 src\semitwist\apps\tests\deferAssertTest\main.d(50): Ensure Throw Failed: Wrong type thrown!
95 Statement 'throw new Exception("Hello");':
96 Expected: object.Object
97 Actual:   object.Exception: Hello
98 core.exception.AssertError@src\semitwist\util\deferAssert.d(171): 9 Assert Failures
99
100 +/
Note: See TracBrowser for help on using the browser.