PageRenderTime 47ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/Facts/Library/TestResultsBuilderFacts.cs

#
C# | 289 lines | 261 code | 28 blank | 0 comment | 0 complexity | c5ac7579bb5f8dc0d486361c190f9084 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, BSD-3-Clause
  1. using System;
  2. using System.Linq;
  3. using Chutzpah.Models;
  4. using Chutzpah.Wrappers;
  5. using Moq;
  6. using Xunit;
  7. namespace Chutzpah.Facts
  8. {
  9. public class TestResultsBuilderFacts
  10. {
  11. private class TestableTestResultsBuilder : Testable<TestResultsBuilder>
  12. {
  13. public TestableTestResultsBuilder()
  14. {
  15. }
  16. }
  17. public class Build
  18. {
  19. [Fact]
  20. public void Will_throw_argument_null_exception_if_browser_result_is_null()
  21. {
  22. var builder = new TestableTestResultsBuilder();
  23. var model = Record.Exception(() => builder.ClassUnderTest.Build(null, TestRunnerMode.Execution)) as ArgumentNullException;
  24. Assert.NotNull(model);
  25. }
  26. [Fact]
  27. public void Will_argument_exception_if_browser_result_json_is_null()
  28. {
  29. var builder = new TestableTestResultsBuilder();
  30. var model =
  31. Record.Exception(() => builder.ClassUnderTest.Build(new BrowserTestFileResult(new TestContext(), null), TestRunnerMode.Execution)) as
  32. ArgumentNullException;
  33. Assert.NotNull(model);
  34. }
  35. [Fact]
  36. public void Will_parse_json_out_of_browser_result()
  37. {
  38. var builder = new TestableTestResultsBuilder();
  39. var json = @"#_#Begin#_#
  40. json
  41. #_#End#_#";
  42. builder.Mock<IJsonSerializer>().Setup(x => x.Deserialize<JsonTestOutput>("json")).Returns(new JsonTestOutput()).Verifiable();
  43. builder.ClassUnderTest.Build(new BrowserTestFileResult(new TestContext(), json), TestRunnerMode.Execution);
  44. builder.Mock<IJsonSerializer>().Verify();
  45. }
  46. [Fact]
  47. public void Will_map_deserialized_json_to_test_result_model_when_TestRunner_mode_is_discovery()
  48. {
  49. var builder = new TestableTestResultsBuilder();
  50. builder.Mock<IHtmlUtility>()
  51. .Setup(x => x.DecodeJavaScript(It.IsAny<string>()))
  52. .Returns<string>(x => "Decoded " + x);
  53. builder.Mock<IJsonSerializer>()
  54. .Setup(x => x.Deserialize<JsonTestOutput>("json"))
  55. .Returns(new JsonTestOutput
  56. {
  57. TestCases = new[]
  58. {
  59. new JsonTestCase
  60. {
  61. Name = "name1"
  62. },
  63. new JsonTestCase
  64. {
  65. Name = "name2",
  66. Module = "module2"
  67. }
  68. }
  69. });
  70. var tests = builder.ClassUnderTest
  71. .Build(new BrowserTestFileResult(new TestContext { TestHarnessPath = "htmlTestFile", InputTestFile = "inputTestFile" }, "json"), TestRunnerMode.Discovery);
  72. Assert.Equal(2, tests.Count());
  73. Assert.Equal("Decoded name1", tests.ElementAt(0).TestName);
  74. Assert.Equal("htmlTestFile", tests.ElementAt(0).HtmlTestFile);
  75. Assert.Equal("inputTestFile", tests.ElementAt(0).InputTestFile);
  76. Assert.Equal("Decoded name2", tests.ElementAt(1).TestName);
  77. Assert.Equal("Decoded module2", tests.ElementAt(1).ModuleName);
  78. Assert.Equal("htmlTestFile", tests.ElementAt(1).HtmlTestFile);
  79. Assert.Equal("inputTestFile", tests.ElementAt(1).InputTestFile);
  80. }
  81. [Fact]
  82. public void Will_map_deserialized_json_to_test_result_model_when_TestRunner_mode_is_execution()
  83. {
  84. var builder = new TestableTestResultsBuilder();
  85. builder.Mock<IHtmlUtility>()
  86. .Setup(x => x.DecodeJavaScript(It.IsAny<string>()))
  87. .Returns<string>(x => "Decoded " + x);
  88. builder.Mock<IJsonSerializer>()
  89. .Setup(x => x.Deserialize<JsonTestOutput>("json"))
  90. .Returns(new JsonTestOutput
  91. {
  92. TestCases = new[]
  93. {
  94. new JsonTestCase
  95. {
  96. Passed = true,
  97. Name = "name1"
  98. },
  99. new JsonTestCase
  100. {
  101. Passed = false,
  102. Name = "name2",
  103. Module = "module2",
  104. Expected = "10",
  105. Actual = "4",
  106. Message = "message"
  107. }
  108. }
  109. });
  110. var tests = builder.ClassUnderTest
  111. .Build(new BrowserTestFileResult(new TestContext { TestHarnessPath = "htmlTestFile", InputTestFile = "inputTestFile" }, "json"), TestRunnerMode.Execution)
  112. .Cast<TestResult>();
  113. Assert.Equal(2, tests.Count());
  114. Assert.True(tests.ElementAt(0).Passed);
  115. Assert.Equal("Decoded name1", tests.ElementAt(0).TestName);
  116. Assert.Equal("htmlTestFile", tests.ElementAt(0).HtmlTestFile);
  117. Assert.Equal("inputTestFile", tests.ElementAt(0).InputTestFile);
  118. Assert.False(tests.ElementAt(1).Passed);
  119. Assert.Equal("Decoded name2", tests.ElementAt(1).TestName);
  120. Assert.Equal("Decoded module2", tests.ElementAt(1).ModuleName);
  121. Assert.Equal("Decoded 10", tests.ElementAt(1).Expected);
  122. Assert.Equal("Decoded 4", tests.ElementAt(1).Actual);
  123. Assert.Equal("Decoded message", tests.ElementAt(1).Message);
  124. Assert.Equal("htmlTestFile", tests.ElementAt(1).HtmlTestFile);
  125. Assert.Equal("inputTestFile", tests.ElementAt(1).InputTestFile);
  126. }
  127. [Fact]
  128. public void Will_get_map_line_numbers_to_test_result()
  129. {
  130. var builder = new TestableTestResultsBuilder();
  131. builder.Mock<IHtmlUtility>()
  132. .Setup(x => x.DecodeJavaScript(It.IsAny<string>()))
  133. .Returns<string>(x => x);
  134. var referencedFile = new ReferencedFile
  135. {
  136. IsFileUnderTest = true,
  137. Path = "inputTestFile",
  138. FilePositions = new FilePositions()
  139. };
  140. referencedFile.FilePositions.Add(1, 3);
  141. builder.Mock<IJsonSerializer>()
  142. .Setup(x => x.Deserialize<JsonTestOutput>("json"))
  143. .Returns(new JsonTestOutput
  144. {
  145. TestCases = new[]
  146. {
  147. new JsonTestCase
  148. {
  149. Passed = false,
  150. Name = "name",
  151. Module = "module",
  152. Expected = "10",
  153. Actual = "4",
  154. Message = "message"
  155. }
  156. }
  157. });
  158. var tests = builder.ClassUnderTest.Build(new BrowserTestFileResult(new TestContext
  159. {
  160. TestHarnessPath = "htmlTestFile",
  161. InputTestFile = "inputTestFile",
  162. ReferencedJavaScriptFiles = new[] { referencedFile }
  163. }, "json"), TestRunnerMode.Execution);
  164. var test = tests.ElementAt(0);
  165. Assert.Equal(1, test.Line);
  166. Assert.Equal(3, test.Column);
  167. }
  168. [Fact]
  169. public void Will_set_line_number_to_zero_if_not_file_positons_exist()
  170. {
  171. var builder = new TestableTestResultsBuilder();
  172. builder.Mock<IHtmlUtility>()
  173. .Setup(x => x.DecodeJavaScript(It.IsAny<string>()))
  174. .Returns<string>(x => x);
  175. var referencedFile = new ReferencedFile
  176. {
  177. IsFileUnderTest = false,
  178. Path = "inputTestFile",
  179. FilePositions = new FilePositions()
  180. };
  181. referencedFile.FilePositions.Add(1, 3);
  182. builder.Mock<IJsonSerializer>()
  183. .Setup(x => x.Deserialize<JsonTestOutput>("json"))
  184. .Returns(new JsonTestOutput
  185. {
  186. TestCases = new[]
  187. {
  188. new JsonTestCase
  189. {
  190. Passed = false,
  191. Name = "name",
  192. Module = "module",
  193. Expected = "10",
  194. Actual = "4",
  195. Message = "message"
  196. }
  197. }
  198. });
  199. var tests = builder.ClassUnderTest.Build(new BrowserTestFileResult(new TestContext
  200. {
  201. TestHarnessPath = "htmlTestFile",
  202. InputTestFile = "inputTestFile",
  203. ReferencedJavaScriptFiles = new[] { referencedFile }
  204. }, "json"), TestRunnerMode.Execution);
  205. var test = tests.ElementAt(0);
  206. Assert.Equal(0, test.Line);
  207. Assert.Equal(0, test.Column);
  208. }
  209. [Fact]
  210. public void Will_set_test_index_is_out_of_range()
  211. {
  212. var builder = new TestableTestResultsBuilder();
  213. builder.Mock<IHtmlUtility>()
  214. .Setup(x => x.DecodeJavaScript(It.IsAny<string>()))
  215. .Returns<string>(x => x);
  216. var referencedFile = new ReferencedFile
  217. {
  218. IsFileUnderTest = true,
  219. Path = "inputTestFile",
  220. FilePositions = new FilePositions()
  221. };
  222. referencedFile.FilePositions.Add(1, 3);
  223. builder.Mock<IJsonSerializer>()
  224. .Setup(x => x.Deserialize<JsonTestOutput>("json"))
  225. .Returns(new JsonTestOutput
  226. {
  227. TestCases = new[]
  228. {
  229. new JsonTestCase
  230. {
  231. Passed = false,
  232. Name = "name",
  233. Module = "module",
  234. Expected = "10",
  235. Actual = "4",
  236. Message = "message"
  237. }
  238. ,new JsonTestCase
  239. {
  240. Passed = false,
  241. Name = "name",
  242. Module = "module",
  243. Expected = "10",
  244. Actual = "4",
  245. Message = "message"
  246. }
  247. }
  248. });
  249. var tests = builder.ClassUnderTest.Build(new BrowserTestFileResult(new TestContext
  250. {
  251. TestHarnessPath = "htmlTestFile",
  252. InputTestFile = "inputTestFile",
  253. ReferencedJavaScriptFiles = new[] { referencedFile }
  254. }, "json"), TestRunnerMode.Execution);
  255. var test = tests.ElementAt(1);
  256. Assert.Equal(0, test.Line);
  257. Assert.Equal(0, test.Column);
  258. }
  259. }
  260. }
  261. }