PageRenderTime 54ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/test/Shunit.cs

http://github.com/toshok/shelisp
C# | 183 lines | 153 code | 25 blank | 5 comment | 14 complexity | b9dc0f240e674a74a512da0c65539aa1 MD5 | raw file
Possible License(s): GPL-3.0
  1. using System;
  2. using System.Linq;
  3. using Shelisp;
  4. namespace Shunit {
  5. public enum Is {
  6. Nil,
  7. T,
  8. Listp,
  9. Stringp,
  10. Numberp,
  11. Integerp,
  12. Floatp,
  13. Symbolp,
  14. Vectorp,
  15. Arrayp,
  16. Sequencep
  17. }
  18. public enum Signals {
  19. Error
  20. }
  21. public enum AssertResult {
  22. Failed,
  23. Succeeded
  24. }
  25. public static class TestRunner {
  26. public static void Initialize (L l, bool verbose)
  27. {
  28. L = l;
  29. Verbose = verbose;
  30. }
  31. public static L L { get; private set; }
  32. [LispBuiltin ("verbose-tests")]
  33. public static bool Verbose;
  34. [LispBuiltin ("number-of-tests")]
  35. public static int NumberOfTests = 0;
  36. [LispBuiltin ("number-of-ignored-tests")]
  37. public static int NumberOfIgnoredTests = 0;
  38. [LispBuiltin ("failed-tests")]
  39. public static Shelisp.Object FailedTests = L.Qnil;
  40. public static void GenerateReport ()
  41. {
  42. Console.WriteLine ();
  43. Console.WriteLine ("ran {0} tests, {1} failures, {2} ignored tests.", NumberOfTests, L.NILP(FailedTests) ? 0 : ((List)FailedTests).Length, NumberOfIgnoredTests);
  44. }
  45. }
  46. public static class Assert {
  47. public static AssertResult Succeed (string description)
  48. {
  49. Console.WriteLine ("SUCCEED");
  50. // record success + description
  51. return AssertResult.Succeeded;
  52. }
  53. public static AssertResult Fail (string description)
  54. {
  55. Console.WriteLine ("FAIL");
  56. // record failure + description
  57. return AssertResult.Failed;
  58. }
  59. public static AssertResult FailException (Exception e, string description)
  60. {
  61. Console.WriteLine ("FAILEX");
  62. Console.WriteLine (e);
  63. // record failure + description
  64. return AssertResult.Failed;
  65. }
  66. public static AssertResult FailExpectedLispError (string lisp_error, string description)
  67. {
  68. Console.WriteLine ("FAILEXPECTEDLISPERROR");
  69. // record failure + description
  70. return AssertResult.Failed;
  71. }
  72. public static AssertResult FailExpectedLispError (string lisp_error, LispException but_received, string description)
  73. {
  74. Console.WriteLine ("FAILEXPECTEDLISPERROR");
  75. Console.WriteLine (but_received);
  76. // record failure + description
  77. return AssertResult.Failed;
  78. }
  79. public static AssertResult That (Shelisp.Object o, Signals signals, string lisp_error, string description = null)
  80. {
  81. try {
  82. o.Eval (TestRunner.L);
  83. return FailExpectedLispError (lisp_error, description);
  84. }
  85. catch (LispException le) {
  86. if (le.Symbol == L.intern (lisp_error))
  87. return Succeed (description);
  88. else
  89. return FailExpectedLispError (lisp_error, le, description);
  90. }
  91. catch (Exception e) {
  92. return FailException (e, description);
  93. }
  94. }
  95. public static AssertResult That (Shelisp.Object @this, Is @is, string description = null)
  96. {
  97. switch (@is) {
  98. case Is.Nil:
  99. if (L.NILP(@this)) return Succeed (description);
  100. break;
  101. case Is.T:
  102. if (!L.NILP(@this)) return Succeed (description);
  103. break;
  104. case Is.Listp:
  105. if (@this is Shelisp.List) return Succeed (description);
  106. break;
  107. case Is.Stringp:
  108. if (@this is Shelisp.String) return Succeed (description);
  109. break;
  110. case Is.Numberp:
  111. if (@this is Number) return Succeed (description);
  112. break;
  113. case Is.Integerp:
  114. if (Number.IsInt(@this)) return Succeed (description);
  115. break;
  116. case Is.Floatp:
  117. if (Number.IsFloat(@this)) return Succeed (description);
  118. break;
  119. case Is.Symbolp:
  120. if (@this is Symbol) return Succeed (description);
  121. break;
  122. case Is.Vectorp:
  123. if (@this is Vector) return Succeed (description);
  124. break;
  125. case Is.Arrayp:
  126. if (@this is Shelisp.Array) return Succeed (description);
  127. break;
  128. case Is.Sequencep:
  129. if (@this is Sequence) return Succeed (description);
  130. break;
  131. default:
  132. return Fail ("unhandled Is value.");
  133. }
  134. return Fail (description);
  135. }
  136. public static AssertResult Eq (Shelisp.Object o1, Shelisp.Object o2, string description = null)
  137. {
  138. try {
  139. return (!o1.LispEq (o2)) ? Fail(description) : Succeed(description);
  140. }
  141. catch (Exception e) {
  142. return FailException (e, description);
  143. }
  144. }
  145. public static AssertResult NotEq (Shelisp.Object o1, Shelisp.Object o2, string description = null)
  146. {
  147. return (o1.LispEq (o2)) ? Fail(description) : Succeed(description);
  148. }
  149. public static AssertResult Equal (Shelisp.Object o1, Shelisp.Object o2, string description = null)
  150. {
  151. return (!o1.LispEqual (o2)) ? Fail(description) : Succeed(description);
  152. }
  153. public static AssertResult NotEqual (Shelisp.Object o1, Shelisp.Object o2, string description = null)
  154. {
  155. return (o1.LispEqual (o2)) ? Fail(description) : Succeed(description);
  156. }
  157. }
  158. }