PageRenderTime 42ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/Tests/GeneratorTests/FeatureGeneratorRegistryTests.cs

http://github.com/techtalk/SpecFlow
C# | 186 lines | 135 code | 51 blank | 0 comment | 0 complexity | 8811f2fcb9e2d3e9774963cad8122903 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 Moq;
  6. using NUnit.Framework;
  7. using TechTalk.SpecFlow.Generator;
  8. using TechTalk.SpecFlow.Generator.Interfaces;
  9. using TechTalk.SpecFlow.Generator.UnitTestConverter;
  10. using TechTalk.SpecFlow.Parser.SyntaxElements;
  11. namespace TechTalk.SpecFlow.GeneratorTests
  12. {
  13. [TestFixture]
  14. public class FeatureGeneratorRegistryTests
  15. {
  16. private IObjectContainer container;
  17. [SetUp]
  18. public void Setup()
  19. {
  20. container = GeneratorContainerBuilder.CreateContainer(new SpecFlowConfigurationHolder(), new ProjectSettings());
  21. }
  22. private FeatureGeneratorRegistry CreateFeatureGeneratorRegistry()
  23. {
  24. return container.Resolve<FeatureGeneratorRegistry>();
  25. }
  26. [Test]
  27. public void Should_create_UnitTestFeatureGenerator_with_default_setup()
  28. {
  29. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  30. Feature anyFeature = new Feature();
  31. var generator = featureGeneratorRegistry.CreateGenerator(anyFeature);
  32. generator.Should().BeOfType<UnitTestFeatureGenerator>();
  33. }
  34. [Test]
  35. public void Should_use_generic_provider_with_higher_priority()
  36. {
  37. var dummyGenerator = new Mock<IFeatureGenerator>().Object;
  38. var genericHighPrioProvider = new Mock<IFeatureGeneratorProvider>();
  39. genericHighPrioProvider.Setup(p => p.CreateGenerator(It.IsAny<Feature>())).Returns(dummyGenerator);
  40. genericHighPrioProvider.Setup(p => p.CanGenerate(It.IsAny<Feature>())).Returns(true); // generic
  41. genericHighPrioProvider.Setup(p => p.Priority).Returns(1); // high-prio
  42. container.RegisterInstanceAs(genericHighPrioProvider.Object, "custom");
  43. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  44. Feature anyFeature = new Feature();
  45. var generator = featureGeneratorRegistry.CreateGenerator(anyFeature);
  46. generator.Should().Be(dummyGenerator);
  47. }
  48. [Test]
  49. public void Should_call_provider_wiht_the_given_feature()
  50. {
  51. var dummyGenerator = new Mock<IFeatureGenerator>().Object;
  52. var genericHighPrioProvider = new Mock<IFeatureGeneratorProvider>();
  53. genericHighPrioProvider.Setup(p => p.CreateGenerator(It.IsAny<Feature>())).Returns(dummyGenerator);
  54. genericHighPrioProvider.Setup(p => p.CanGenerate(It.IsAny<Feature>())).Returns(true); // generic
  55. genericHighPrioProvider.Setup(p => p.Priority).Returns(1); // high-prio
  56. container.RegisterInstanceAs(genericHighPrioProvider.Object, "custom");
  57. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  58. Feature theFeature = new Feature();
  59. featureGeneratorRegistry.CreateGenerator(theFeature);
  60. genericHighPrioProvider.Verify(p => p.CreateGenerator(theFeature), Times.Once());
  61. }
  62. [Test]
  63. public void Should_skip_high_priority_provider_when_not_applicable()
  64. {
  65. var dummyGenerator = new Mock<IFeatureGenerator>().Object;
  66. Feature theFeature = new Feature();
  67. var genericHighPrioProvider = new Mock<IFeatureGeneratorProvider>();
  68. genericHighPrioProvider.Setup(p => p.CreateGenerator(It.IsAny<Feature>())).Returns(dummyGenerator);
  69. genericHighPrioProvider.Setup(p => p.CanGenerate(theFeature)).Returns(false); // not applicable for aFeature
  70. genericHighPrioProvider.Setup(p => p.Priority).Returns(1); // high-prio
  71. container.RegisterInstanceAs(genericHighPrioProvider.Object, "custom");
  72. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  73. var generator = featureGeneratorRegistry.CreateGenerator(theFeature);
  74. generator.Should().BeOfType<UnitTestFeatureGenerator>();
  75. }
  76. [Test]
  77. public void Should_FeatureGeneratorRegistry_be_registered_as_IFeatureGeneratorRegistry_by_default()
  78. {
  79. var testContainer = GeneratorContainerBuilder.CreateContainer(new SpecFlowConfigurationHolder(), new ProjectSettings());
  80. var registry = testContainer.Resolve<IFeatureGeneratorRegistry>();
  81. registry.Should().BeOfType<FeatureGeneratorRegistry>();
  82. }
  83. private class TestTagFilteredFeatureGeneratorProvider : TagFilteredFeatureGeneratorProvider
  84. {
  85. static public IFeatureGenerator DummyGenerator = new Mock<IFeatureGenerator>().Object;
  86. public TestTagFilteredFeatureGeneratorProvider(ITagFilterMatcher tagFilterMatcher, string registeredName) : base(tagFilterMatcher, registeredName)
  87. {
  88. }
  89. public override IFeatureGenerator CreateGenerator(Feature feature)
  90. {
  91. return DummyGenerator;
  92. }
  93. }
  94. [Test]
  95. public void Should_TagFilteredFeatureGeneratorProvider_applied_for_registered_tag_name()
  96. {
  97. container.RegisterTypeAs<TestTagFilteredFeatureGeneratorProvider, IFeatureGeneratorProvider>("mytag");
  98. Feature theFeature = new Feature();
  99. theFeature.Tags = new Tags(new Tag("mytag"));
  100. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  101. var generator = featureGeneratorRegistry.CreateGenerator(theFeature);
  102. generator.Should().Be(TestTagFilteredFeatureGeneratorProvider.DummyGenerator);
  103. }
  104. [Test]
  105. public void Should_TagFilteredFeatureGeneratorProvider_applied_for_registered_tag_name_with_at()
  106. {
  107. container.RegisterTypeAs<TestTagFilteredFeatureGeneratorProvider, IFeatureGeneratorProvider>("@mytag");
  108. Feature theFeature = new Feature();
  109. theFeature.Tags = new Tags(new Tag("mytag"));
  110. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  111. var generator = featureGeneratorRegistry.CreateGenerator(theFeature);
  112. generator.Should().Be(TestTagFilteredFeatureGeneratorProvider.DummyGenerator);
  113. }
  114. [Test]
  115. public void Should_TagFilteredFeatureGeneratorProvider_not_be_applied_for_feature_with_other_tgas()
  116. {
  117. container.RegisterTypeAs<TestTagFilteredFeatureGeneratorProvider, IFeatureGeneratorProvider>("mytag");
  118. Feature theFeature = new Feature();
  119. theFeature.Tags = new Tags(new Tag("othertag"));
  120. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  121. var generator = featureGeneratorRegistry.CreateGenerator(theFeature);
  122. generator.Should().NotBe(TestTagFilteredFeatureGeneratorProvider.DummyGenerator);
  123. }
  124. [Test]
  125. public void Should_TagFilteredFeatureGeneratorProvider_not_be_applied_for_feature_with_no_tgas()
  126. {
  127. container.RegisterTypeAs<TestTagFilteredFeatureGeneratorProvider, IFeatureGeneratorProvider>("mytag");
  128. Feature theFeature = new Feature();
  129. theFeature.Tags = new Tags();
  130. var featureGeneratorRegistry = CreateFeatureGeneratorRegistry();
  131. var generator = featureGeneratorRegistry.CreateGenerator(theFeature);
  132. generator.Should().NotBe(TestTagFilteredFeatureGeneratorProvider.DummyGenerator);
  133. }
  134. }
  135. }