PageRenderTime 28ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/Tests/TechTalk.SpecFlow.RuntimeTests/Configuration/JsonConfigTests.cs

http://github.com/techtalk/SpecFlow
C# | 498 lines | 369 code | 129 blank | 0 comment | 0 complexity | f79c53899765b03e5b249fb2b7c37969 MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-2.0
  1. using System;
  2. using System.Linq;
  3. using BoDi;
  4. using FluentAssertions;
  5. using Xunit;
  6. using TechTalk.SpecFlow.BindingSkeletons;
  7. using TechTalk.SpecFlow.Configuration;
  8. using TechTalk.SpecFlow.Configuration.JsonConfig;
  9. using TechTalk.SpecFlow.Plugins;
  10. namespace TechTalk.SpecFlow.RuntimeTests.Configuration
  11. {
  12. public class JsonConfigTests
  13. {
  14. [Theory]
  15. [InlineData(@"{
  16. ""language"": {
  17. ""feature"": ""en"",
  18. ""tool"": ""en""
  19. },
  20. ""unitTestProvider"": {
  21. ""name"": ""NUnit"",
  22. ""generatorProvider"": ""TechTalk.SpecFlow.TestFrameworkIntegration.NUnitRuntimeProvider, TechTalk.SpecFlow"",
  23. ""runtimeProvider"": ""TechTalk.SpecFlow.UnitTestProvider.NUnitRuntimeProvider, TechTalk.SpecFlow""
  24. },
  25. ""generator"": { ""allowDebugGeneratedFiles"": false , ""markFeaturesParallelizable"": false,
  26. ""skipParallelizableMarkerForTags"": [""mySpecialTag1"", ""mySpecialTag2""]},
  27. ""runtime"": {
  28. ""stopAtFirstError"": false,
  29. ""missingOrPendingStepsOutcome"": ""Inconclusive""
  30. },
  31. ""trace"": {
  32. ""traceSuccessfulSteps"": true,
  33. ""traceTimings"": false,
  34. ""minTracedDuration"": ""0:0:0.1"",
  35. ""listener"": ""TechTalk.SpecFlow.Tracing.DefaultListener, TechTalk.SpecFlow""
  36. },
  37. ""cucumber-messages"":
  38. {
  39. ""enabled"": false,
  40. ""sinks"":
  41. [
  42. { ""type"": ""file"", ""path"": ""C:\temp\testrun.cm"" },
  43. { ""type"": ""file"", ""path"": ""testrun.cm"" },
  44. { ""type"": ""file"", ""path"": ""%temp%\testrun.cm"" }
  45. ]
  46. }
  47. }")]
  48. public void CanLoadConfigFromString(string configString)
  49. {
  50. var configurationLoader = new JsonConfigurationLoader();
  51. configurationLoader.LoadJson(ConfigurationLoader.GetDefault(), configString);
  52. }
  53. [Fact]
  54. public void CheckFeatureLanguage()
  55. {
  56. string config = @"{
  57. ""language"": { ""feature"": ""de"" }
  58. }";
  59. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  60. runtimeConfig.FeatureLanguage.TwoLetterISOLanguageName.Should().Be("de");
  61. }
  62. [Fact]
  63. public void CheckBindingCulture()
  64. {
  65. string config = @"{
  66. ""bindingCulture"": { ""name"": ""de"" }
  67. }";
  68. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  69. runtimeConfig.BindingCulture.TwoLetterISOLanguageName.Should().Be("de");
  70. }
  71. [Fact]
  72. public void Check_Runtime_stopAtFirstError_as_true()
  73. {
  74. string config = @"{
  75. ""runtime"": { ""stopAtFirstError"": true }
  76. }";
  77. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  78. runtimeConfig.StopAtFirstError.Should().BeTrue();
  79. }
  80. [Fact]
  81. public void Check_Runtime_stopAtFirstError_as_false()
  82. {
  83. string config = @"{
  84. ""runtime"": { ""stopAtFirstError"": false }
  85. }";
  86. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  87. runtimeConfig.StopAtFirstError.Should().BeFalse();
  88. }
  89. [Fact]
  90. public void Check_Runtime_missingOrPendingStepsOutcome_as_Pending()
  91. {
  92. string config = @"{
  93. ""runtime"": { ""missingOrPendingStepsOutcome"": ""Pending"" }
  94. }";
  95. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  96. runtimeConfig.MissingOrPendingStepsOutcome.Should().Be(MissingOrPendingStepsOutcome.Pending);
  97. }
  98. [Fact]
  99. public void Check_Runtime_missingOrPendingStepsOutcome_as_Error()
  100. {
  101. string config = @"{
  102. ""runtime"": { ""missingOrPendingStepsOutcome"": ""Error"" }
  103. }";
  104. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  105. runtimeConfig.MissingOrPendingStepsOutcome.Should().Be(MissingOrPendingStepsOutcome.Error);
  106. }
  107. [Fact]
  108. public void Check_Runtime_missingOrPendingStepsOutcome_as_Ignore()
  109. {
  110. string config = @"{
  111. ""runtime"": { ""missingOrPendingStepsOutcome"": ""Ignore"" }
  112. }";
  113. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  114. runtimeConfig.MissingOrPendingStepsOutcome.Should().Be(MissingOrPendingStepsOutcome.Ignore);
  115. }
  116. [Fact]
  117. public void Check_Runtime_missingOrPendingStepsOutcome_as_Inconclusive()
  118. {
  119. string config = @"{
  120. ""runtime"": { ""missingOrPendingStepsOutcome"": ""Inconclusive"" }
  121. }";
  122. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  123. runtimeConfig.MissingOrPendingStepsOutcome.Should().Be(MissingOrPendingStepsOutcome.Inconclusive);
  124. }
  125. [Fact]
  126. public void Check_Trace_traceSuccessfulSteps_as_True()
  127. {
  128. string config = @"{
  129. ""trace"": { ""traceSuccessfulSteps"": true }
  130. }";
  131. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  132. runtimeConfig.TraceSuccessfulSteps.Should().BeTrue();
  133. }
  134. [Fact]
  135. public void Check_Trace_traceSuccessfulSteps_as_False()
  136. {
  137. string config = @"{
  138. ""trace"": { ""traceSuccessfulSteps"": false }
  139. }";
  140. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  141. runtimeConfig.TraceSuccessfulSteps.Should().BeFalse();
  142. }
  143. [Fact]
  144. public void Check_Trace_traceTimings_as_True()
  145. {
  146. string config = @"{
  147. ""trace"": { ""traceTimings"": true }
  148. }";
  149. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  150. runtimeConfig.TraceTimings.Should().BeTrue();
  151. }
  152. [Fact]
  153. public void Check_Trace_traceTimings_as_False()
  154. {
  155. string config = @"{
  156. ""trace"": { ""traceTimings"": false }
  157. }";
  158. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  159. runtimeConfig.TraceTimings.Should().BeFalse();
  160. }
  161. [Fact]
  162. public void Check_Trace_minTracedDuration()
  163. {
  164. string config = @"{
  165. ""trace"": { ""minTracedDuration"": ""0:0:0:1.0"" }
  166. }";
  167. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  168. runtimeConfig.MinTracedDuration.Should().Be(TimeSpan.FromSeconds(1));
  169. }
  170. [Fact]
  171. public void Trace_Listener_Not_Supported()
  172. {
  173. string config = @"{
  174. ""trace"": { ""listener"": ""TraceListener"" }
  175. }";
  176. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  177. runtimeConfig.CustomDependencies.Count.Should().Be(0);
  178. }
  179. [Fact]
  180. public void Check_Trace_StepDefinitionSkeletonStyle_RegexAttribute()
  181. {
  182. string config = @"{
  183. ""trace"": { ""stepDefinitionSkeletonStyle"": ""RegexAttribute"" }
  184. }";
  185. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  186. runtimeConfig.StepDefinitionSkeletonStyle.Should().Be(StepDefinitionSkeletonStyle.RegexAttribute);
  187. }
  188. [Fact]
  189. public void Check_Trace_StepDefinitionSkeletonStyle_MethodNamePascalCase()
  190. {
  191. string config = @"{
  192. ""trace"": { ""stepDefinitionSkeletonStyle"": ""MethodNamePascalCase"" }
  193. }";
  194. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  195. runtimeConfig.StepDefinitionSkeletonStyle.Should().Be(StepDefinitionSkeletonStyle.MethodNamePascalCase);
  196. }
  197. [Fact]
  198. public void Check_Trace_StepDefinitionSkeletonStyle_MethodNameRegex()
  199. {
  200. string config = @"{
  201. ""trace"": { ""stepDefinitionSkeletonStyle"": ""MethodNameRegex"" }
  202. }";
  203. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  204. runtimeConfig.StepDefinitionSkeletonStyle.Should().Be(StepDefinitionSkeletonStyle.MethodNameRegex);
  205. }
  206. [Fact]
  207. public void Check_Trace_StepDefinitionSkeletonStyle_MethodNameUnderscores()
  208. {
  209. string config = @"{
  210. ""trace"": { ""stepDefinitionSkeletonStyle"": ""MethodNameUnderscores"" }
  211. }";
  212. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  213. runtimeConfig.StepDefinitionSkeletonStyle.Should().Be(StepDefinitionSkeletonStyle.MethodNameUnderscores);
  214. }
  215. [Fact]
  216. public void Check_StepAssemblies_IsEmpty()
  217. {
  218. string config = @"{
  219. ""stepAssemblies"" : [
  220. ]
  221. }";
  222. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  223. runtimeConfig.AdditionalStepAssemblies.Should().BeEmpty();
  224. }
  225. [Fact]
  226. public void Check_StepAssemblies_NotInConfigFile()
  227. {
  228. string config = @"{
  229. }";
  230. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  231. runtimeConfig.AdditionalStepAssemblies.Should().BeEmpty();
  232. }
  233. [Fact]
  234. public void Check_StepAssemblies_OneEntry()
  235. {
  236. string config = @"{
  237. ""stepAssemblies"":
  238. [ {""assembly"": ""testEntry""} ]
  239. }";
  240. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  241. runtimeConfig.AdditionalStepAssemblies.Count.Should().Be(1);
  242. runtimeConfig.AdditionalStepAssemblies.First().Should().Be("testEntry");
  243. }
  244. [Fact]
  245. public void Check_StepAssemblies_TwoEntry()
  246. {
  247. string config = @"{
  248. ""stepAssemblies"": [
  249. { ""assembly"": ""testEntry1"" },
  250. { ""assembly"": ""testEntry2"" }
  251. ]
  252. }";
  253. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  254. runtimeConfig.AdditionalStepAssemblies.Count.Should().Be(2);
  255. runtimeConfig.AdditionalStepAssemblies[0].Should().Be("testEntry1");
  256. runtimeConfig.AdditionalStepAssemblies[1].Should().Be("testEntry2");
  257. }
  258. [Fact]
  259. public void Check_CucumberMessages_NotConfigured_EnabledIsFalse()
  260. {
  261. string config = @"{
  262. }";
  263. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  264. runtimeConfig.CucumberMessagesConfiguration.Enabled.Should().BeFalse();
  265. }
  266. [Fact]
  267. public void Check_CucumberMessages_EmptyTag_EnabledIsFalse()
  268. {
  269. string config = @"{
  270. ""cucumber-messages"":
  271. {
  272. }
  273. }";
  274. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  275. runtimeConfig.CucumberMessagesConfiguration.Enabled.Should().BeFalse();
  276. }
  277. [Fact]
  278. public void Check_CucumberMessages_Enabled_True()
  279. {
  280. string config = @"{
  281. ""cucumber-messages"":
  282. {
  283. ""enabled"": true
  284. }
  285. }";
  286. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  287. runtimeConfig.CucumberMessagesConfiguration.Enabled.Should().BeTrue();
  288. }
  289. [Fact]
  290. public void Check_CucumberMessages_Enabled_False()
  291. {
  292. string config = @"{
  293. ""cucumber-messages"":
  294. {
  295. ""enabled"": false
  296. }
  297. }";
  298. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  299. runtimeConfig.CucumberMessagesConfiguration.Enabled.Should().BeFalse();
  300. }
  301. [Fact]
  302. public void Check_CucumberMessages_Sinks_EmptyList()
  303. {
  304. string config = @"{
  305. ""cucumber-messages"":
  306. {
  307. ""enabled"": false,
  308. ""sinks"":
  309. [
  310. ]
  311. }
  312. }";
  313. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  314. runtimeConfig.CucumberMessagesConfiguration.Sinks.Should().BeEmpty();
  315. }
  316. [Fact]
  317. public void Check_CucumberMessages_Sinks_ListOneEntry()
  318. {
  319. string config = @"{
  320. ""cucumber-messages"":
  321. {
  322. ""enabled"": false,
  323. ""sinks"":
  324. [
  325. { ""type"": ""file"", ""path"": ""C:\temp\testrun.cm"" }
  326. ]
  327. }
  328. }";
  329. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  330. runtimeConfig.CucumberMessagesConfiguration.Sinks.Count.Should().Be(1);
  331. }
  332. [Fact]
  333. public void Check_CucumberMessages_Sinks_ListMultipleEntry()
  334. {
  335. string config = @"{
  336. ""cucumber-messages"":
  337. {
  338. ""enabled"": false,
  339. ""sinks"":
  340. [
  341. { ""type"": ""file"", ""path"": ""C:\temp\testrun.cm"" },
  342. { ""type"": ""file"", ""path"": ""C:\temp\testrun.cm"" },
  343. { ""type"": ""file"", ""path"": ""C:\temp\testrun.cm"" }
  344. ]
  345. }
  346. }";
  347. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  348. runtimeConfig.CucumberMessagesConfiguration.Sinks.Count.Should().Be(3);
  349. }
  350. [Fact]
  351. public void Check_CucumberMessages_Sinks_DataOfEntry()
  352. {
  353. string config = @"{
  354. ""cucumber-messages"":
  355. {
  356. ""enabled"": false,
  357. ""sinks"":
  358. [
  359. { ""type"": ""file"", ""path"": ""C:\\temp\\testrun.cm"" }
  360. ]
  361. }
  362. }";
  363. var runtimeConfig = new JsonConfigurationLoader().LoadJson(ConfigurationLoader.GetDefault(), config);
  364. var cucumberMessagesSink = runtimeConfig.CucumberMessagesConfiguration.Sinks.First();
  365. cucumberMessagesSink.Type.Should().Be("file");
  366. cucumberMessagesSink.Path.Should().Be(@"C:\temp\testrun.cm");
  367. }
  368. }
  369. }