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

/Tests/GeneratorTests/TestUpToDateCheckerTests.cs

http://github.com/techtalk/SpecFlow
C# | 229 lines | 170 code | 50 blank | 9 comment | 0 complexity | 3a2d019feacc859042263cf74d656961 MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-2.0
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Threading;
  5. using Moq;
  6. using NUnit.Framework;
  7. using TechTalk.SpecFlow.Generator;
  8. using TechTalk.SpecFlow.Generator.Configuration;
  9. using TechTalk.SpecFlow.Generator.Interfaces;
  10. using TechTalk.SpecFlow.Utils;
  11. using FluentAssertions;
  12. namespace TechTalk.SpecFlow.GeneratorTests
  13. {
  14. [TestFixture]
  15. public class TestUpToDateCheckerTests
  16. {
  17. protected Mock<ITestHeaderWriter> TestHeaderWriterStub;
  18. [SetUp]
  19. public virtual void Setup()
  20. {
  21. TestHeaderWriterStub = new Mock<ITestHeaderWriter>();
  22. }
  23. private TestUpToDateChecker CreateUpToDateChecker()
  24. {
  25. var net35CSSettings = new ProjectPlatformSettings
  26. {
  27. Language = GenerationTargetLanguage.CSharp,
  28. LanguageVersion = new Version("3.0"),
  29. Platform = GenerationTargetPlatform.DotNet,
  30. PlatformVersion = new Version("3.5"),
  31. };
  32. return new TestUpToDateChecker(TestHeaderWriterStub.Object,
  33. new GeneratorInfo { GeneratorVersion = TestGeneratorFactory.GeneratorVersion},
  34. new ProjectSettings { ProjectFolder = Path.GetTempPath(), ProjectPlatformSettings = net35CSSettings });
  35. }
  36. [Test]
  37. public void Should_detect_up_to_date_test_file_based_on_modification_time()
  38. {
  39. using (var tempFile = new TempFile(".feature"))
  40. {
  41. tempFile.SetContent("any");
  42. using (var tempTestFile = new TempFile(".cs"))
  43. {
  44. // set test content
  45. tempTestFile.SetContent("any_code");
  46. var testUpToDateChecker = CreateUpToDateChecker();
  47. TestHeaderWriterStub.Setup(thw => thw.DetectGeneratedTestVersion(It.IsAny<string>())).Returns(TestGeneratorFactory.GeneratorVersion);
  48. var result = testUpToDateChecker.IsUpToDatePreliminary(new FeatureFileInput(tempFile.FileName),
  49. tempTestFile.FullPath, UpToDateCheckingMethod.ModificationTimeAndGeneratorVersion);
  50. result.Should().Be(true);
  51. }
  52. }
  53. }
  54. [Test]
  55. public void Should_detect_outdated_date_test_file_if_feature_file_has_outdated_generator_version()
  56. {
  57. using (var tempFile = new TempFile(".feature"))
  58. {
  59. tempFile.SetContent("any");
  60. using (var tempTestFile = new TempFile(".cs"))
  61. {
  62. // set test content
  63. tempTestFile.SetContent("any_code");
  64. var testUpToDateChecker = CreateUpToDateChecker();
  65. this.TestHeaderWriterStub.Setup(thw => thw.DetectGeneratedTestVersion(It.IsAny<string>())).Returns(new Version(1, 0));
  66. // version 1.0 is surely older than the current one
  67. var result = testUpToDateChecker.IsUpToDatePreliminary(new FeatureFileInput(tempFile.FileName),
  68. tempTestFile.FullPath, UpToDateCheckingMethod.ModificationTimeAndGeneratorVersion);
  69. result.Should().Be(false);
  70. }
  71. }
  72. }
  73. [Test]
  74. public void Should_detect_outdated_date_test_file_if_feature_file_missing()
  75. {
  76. using (var tempFile = new TempFile(".feature"))
  77. {
  78. tempFile.SetContent("any");
  79. var testUpToDateChecker = CreateUpToDateChecker();
  80. var result = testUpToDateChecker.IsUpToDatePreliminary(new FeatureFileInput(tempFile.FileName),
  81. tempFile.FileName + ".cs", UpToDateCheckingMethod.ModificationTimeAndGeneratorVersion);
  82. result.Should().Be(false);
  83. }
  84. }
  85. [Test]
  86. public void Should_detect_outdated_date_test_file_if_feature_file_changed_based_on_modification_time()
  87. {
  88. using (var tempFile = new TempFile(".feature"))
  89. {
  90. tempFile.SetContent("any");
  91. using (var tempTestFile = new TempFile(".cs"))
  92. {
  93. // set test content
  94. tempTestFile.SetContent("any_code");
  95. //re-set content with a slight delay
  96. Thread.Sleep(10);
  97. tempFile.SetContent("new_feature");
  98. var testUpToDateChecker = CreateUpToDateChecker();
  99. TestHeaderWriterStub.Setup(thw => thw.DetectGeneratedTestVersion(It.IsAny<string>())).Returns(TestGeneratorFactory.GeneratorVersion);
  100. var result = testUpToDateChecker.IsUpToDatePreliminary(new FeatureFileInput(tempFile.FileName),
  101. tempTestFile.FullPath, UpToDateCheckingMethod.ModificationTimeAndGeneratorVersion);
  102. result.Should().Be(false);
  103. }
  104. }
  105. }
  106. [Test]
  107. public void Should_not_give_preliminary_positive_result_if_file_content_check_was_requested()
  108. {
  109. using (var tempFile = new TempFile(".feature"))
  110. {
  111. tempFile.SetContent("any");
  112. using (var tempTestFile = new TempFile(".cs"))
  113. {
  114. // set test content
  115. tempTestFile.SetContent("any_code");
  116. var testUpToDateChecker = CreateUpToDateChecker();
  117. TestHeaderWriterStub.Setup(thw => thw.DetectGeneratedTestVersion(It.IsAny<string>())).Returns(TestGeneratorFactory.GeneratorVersion);
  118. var result = testUpToDateChecker.IsUpToDatePreliminary(new FeatureFileInput(tempFile.FileName),
  119. tempTestFile.FullPath, UpToDateCheckingMethod.FileContent);
  120. result.Should().NotHaveValue();
  121. }
  122. }
  123. }
  124. [Test]
  125. public void Should_detect_up_to_date_test_file_based_on_content_compare_from_file()
  126. {
  127. using (var tempFile = new TempFile(".feature"))
  128. {
  129. tempFile.SetContent("any");
  130. using (var tempTestFile = new TempFile(".cs"))
  131. {
  132. // set test content
  133. tempTestFile.SetContent("any_code");
  134. var testUpToDateChecker = CreateUpToDateChecker();
  135. TestHeaderWriterStub.Setup(thw => thw.DetectGeneratedTestVersion(It.IsAny<string>())).Returns(TestGeneratorFactory.GeneratorVersion);
  136. var result = testUpToDateChecker.IsUpToDate(new FeatureFileInput(tempFile.FileName),
  137. tempTestFile.FullPath, "any_code", UpToDateCheckingMethod.FileContent);
  138. result.Should().Be(true);
  139. }
  140. }
  141. }
  142. [Test]
  143. public void Should_detect_up_to_date_test_file_based_on_content_compare_from_provided_content()
  144. {
  145. using (var tempFile = new TempFile(".feature"))
  146. {
  147. tempFile.SetContent("any");
  148. using (var tempTestFile = new TempFile(".cs"))
  149. {
  150. // set test content
  151. tempTestFile.SetContent("any_old_code");
  152. var testUpToDateChecker = CreateUpToDateChecker();
  153. TestHeaderWriterStub.Setup(thw => thw.DetectGeneratedTestVersion(It.IsAny<string>())).Returns(TestGeneratorFactory.GeneratorVersion);
  154. var result = testUpToDateChecker.IsUpToDate(new FeatureFileInput(tempFile.FileName) { GeneratedTestFileContent = "any_code" },
  155. tempTestFile.FullPath, "any_code", UpToDateCheckingMethod.FileContent);
  156. result.Should().Be(true);
  157. }
  158. }
  159. }
  160. [Test]
  161. public void Should_outdated_test_file_based_on_content_compare_from_file()
  162. {
  163. using (var tempFile = new TempFile(".feature"))
  164. {
  165. tempFile.SetContent("any");
  166. using (var tempTestFile = new TempFile(".cs"))
  167. {
  168. // set test content
  169. tempTestFile.SetContent("any_code");
  170. var testUpToDateChecker = CreateUpToDateChecker();
  171. TestHeaderWriterStub.Setup(thw => thw.DetectGeneratedTestVersion(It.IsAny<string>())).Returns(TestGeneratorFactory.GeneratorVersion);
  172. var result = testUpToDateChecker.IsUpToDate(new FeatureFileInput(tempFile.FileName),
  173. tempTestFile.FullPath, "new_code", UpToDateCheckingMethod.FileContent);
  174. result.Should().Be(false);
  175. }
  176. }
  177. }
  178. }
  179. }