-
Notifications
You must be signed in to change notification settings - Fork 750
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
338 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
104 changes: 104 additions & 0 deletions
104
Generator/UnitTestProvider/MbUnitTestGeneratorProvider.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
using System; | ||
using System.CodeDom; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
|
||
namespace TechTalk.SpecFlow.Generator.UnitTestProvider | ||
{ | ||
public class MbUnitTestGeneratorProvider : IUnitTestGeneratorProvider | ||
{ | ||
private const string TESTFIXTURE_ATTR = "MbUnit.Framework.TestFixtureAttribute"; | ||
private const string TEST_ATTR = "MbUnit.Framework.TestAttribute"; | ||
private const string CATEGORY_ATTR = "MbUnit.Framework.CategoryAttribute"; | ||
private const string TESTSETUP_ATTR = "MbUnit.Framework.SetUpAttribute"; | ||
private const string TESTFIXTURESETUP_ATTR = "MbUnit.Framework.FixtureSetUpAttribute"; | ||
private const string TESTFIXTURETEARDOWN_ATTR = "MbUnit.Framework.FixtureTearDownAttribute"; | ||
private const string TESTTEARDOWN_ATTR = "MbUnit.Framework.TearDownAttribute"; | ||
private const string IGNORE_ATTR = "MbUnit.Framework.IgnoreAttribute"; | ||
private const string DESCRIPTION_ATTR = "MbUnit.Framework.DescriptionAttribute"; | ||
|
||
public void SetTestFixture(CodeTypeDeclaration typeDeclaration, string title, string description) | ||
{ | ||
typeDeclaration.CustomAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(TESTFIXTURE_ATTR))); | ||
|
||
SetDescription(typeDeclaration.CustomAttributes, title); | ||
} | ||
|
||
private void SetDescription(CodeAttributeDeclarationCollection customAttributes, string description) | ||
{ | ||
customAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(DESCRIPTION_ATTR), | ||
new CodeAttributeArgument( | ||
new CodePrimitiveExpression(description)))); | ||
} | ||
|
||
private void SetCategories(CodeAttributeDeclarationCollection customAttributes, IEnumerable<string> categories) | ||
{ | ||
foreach (var category in categories) | ||
{ | ||
customAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(CATEGORY_ATTR), | ||
new CodeAttributeArgument( | ||
new CodePrimitiveExpression(category)))); | ||
} | ||
} | ||
|
||
public void SetTestFixtureCategories(CodeTypeDeclaration typeDeclaration, IEnumerable<string> categories) | ||
{ | ||
SetCategories(typeDeclaration.CustomAttributes, categories); | ||
} | ||
|
||
public void SetTest(CodeMemberMethod memberMethod, string title) | ||
{ | ||
memberMethod.CustomAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(TEST_ATTR))); | ||
|
||
SetDescription(memberMethod.CustomAttributes, title); | ||
} | ||
|
||
public void SetTestCategories(CodeMemberMethod memberMethod, IEnumerable<string> categories) | ||
{ | ||
SetCategories(memberMethod.CustomAttributes, categories); | ||
} | ||
|
||
public void SetTestSetup(CodeMemberMethod memberMethod) | ||
{ | ||
memberMethod.CustomAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(TESTSETUP_ATTR))); | ||
} | ||
|
||
public void SetTestFixtureSetup(CodeMemberMethod memberMethod) | ||
{ | ||
memberMethod.CustomAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(TESTFIXTURESETUP_ATTR))); | ||
} | ||
|
||
public void SetTestFixtureTearDown(CodeMemberMethod memberMethod) | ||
{ | ||
memberMethod.CustomAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(TESTFIXTURETEARDOWN_ATTR))); | ||
} | ||
|
||
public void SetTestTearDown(CodeMemberMethod memberMethod) | ||
{ | ||
memberMethod.CustomAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(TESTTEARDOWN_ATTR))); | ||
} | ||
|
||
public void SetIgnore(CodeTypeMember codeTypeMember) | ||
{ | ||
codeTypeMember.CustomAttributes.Add( | ||
new CodeAttributeDeclaration( | ||
new CodeTypeReference(IGNORE_ATTR))); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
using System; | ||
|
||
namespace TechTalk.SpecFlow.UnitTestProvider | ||
{ | ||
public class MbUnitRuntimeProvider : IUnitTestRuntimeProvider | ||
{ | ||
private const string MSTEST_ASSEMBLY = "MbUnit"; | ||
private const string ASSERT_TYPE = "MbUnit.Framework.Assert"; | ||
|
||
private Action<string> assertInconclusive; | ||
|
||
#region IUnitTestRuntimeProvider Members | ||
|
||
public void TestInconclusive(string message) | ||
{ | ||
if (assertInconclusive == null) | ||
{ | ||
assertInconclusive = UnitTestRuntimeProviderHelper | ||
.GetAssertMethod(MSTEST_ASSEMBLY, ASSERT_TYPE, "Inconclusive"); | ||
} | ||
|
||
assertInconclusive(message); | ||
} | ||
|
||
public void TestIgnore(string message) | ||
{ | ||
TestInconclusive(message); // there is no dynamic "Ignore" in mstest | ||
} | ||
|
||
public bool DelayedFixtureTearDown | ||
{ | ||
get { return true; } | ||
} | ||
|
||
#endregion | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
using System; | ||
using System.CodeDom; | ||
using System.CodeDom.Compiler; | ||
using System.Globalization; | ||
using System.IO; | ||
using System.Text; | ||
using Microsoft.CSharp; | ||
using NUnit.Framework; | ||
using TechTalk.SpecFlow.Generator; | ||
using TechTalk.SpecFlow.Generator.UnitTestProvider; | ||
using TechTalk.SpecFlow.Parser; | ||
using TechTalk.SpecFlow.Parser.SyntaxElements; | ||
|
||
namespace ParserTests | ||
{ | ||
[TestFixture] | ||
public class SuccessfulMbUnitGenerationTest | ||
{ | ||
private void CompareWithExpectedResult(Feature feature, string expectedResultFileName) | ||
{ | ||
string expected = TestFileHelper.ReadFile(expectedResultFileName); | ||
string got = GenerateCodeFromFeature(feature); | ||
|
||
Assert.AreEqual(expected, got); | ||
} | ||
|
||
private void GenerateCodeFromFeature(Feature feature, TextWriter writer) | ||
{ | ||
var codeDomHelper = new CodeDomHelper(GenerationTargetLanguage.CSharp); | ||
var mbUnitTestGeneratorProvider = new MbUnitTestGeneratorProvider(); | ||
var converter = new SpecFlowUnitTestConverter(mbUnitTestGeneratorProvider, codeDomHelper, true); | ||
CodeNamespace codeNamespace = converter.GenerateUnitTestFixture(feature, "TestClassName", "Target.Namespace"); | ||
|
||
var codeProvider = new CSharpCodeProvider(); | ||
var options = new CodeGeneratorOptions(); | ||
codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, options); | ||
} | ||
|
||
private void GenerateCodeFromFeature(Feature feature, string fileName) | ||
{ | ||
using (var writer = new StreamWriter(fileName, false, Encoding.UTF8)) | ||
{ | ||
GenerateCodeFromFeature(feature, writer); | ||
} | ||
} | ||
|
||
private string GenerateCodeFromFeature(Feature feature) | ||
{ | ||
using (var writer = new Utf8StringWriter()) | ||
{ | ||
GenerateCodeFromFeature(feature, writer); | ||
return writer.ToString(); | ||
} | ||
} | ||
|
||
[Test] | ||
public void CanGenerateButFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "but.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateCommentsFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "comments.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateFeatureheaderFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "featureheader.feature")); | ||
} | ||
|
||
[Test, TestCaseSource(typeof (TestFileHelper), "GetTestFiles")] | ||
public void CanGenerateFromFile(string fileName) | ||
{ | ||
Console.WriteLine(fileName); | ||
var parser = new SpecFlowLangParser(new CultureInfo("en-US")); | ||
using (var reader = new StreamReader(fileName)) | ||
{ | ||
Feature feature = parser.Parse(reader); | ||
Assert.IsNotNull(feature); | ||
|
||
string generatedCode = GenerateCodeFromFeature(feature); | ||
Assert.IsNotNull(generatedCode); | ||
|
||
// to regenerate the expected result file: | ||
//GenerateCodeFromFeature(feature, fileName + ".cs"); | ||
|
||
//CompareWithExpectedResult(feature, fileName + ".cs"); | ||
} | ||
} | ||
|
||
[Test] | ||
public void CanGenerateFromFiles() | ||
{ | ||
foreach (string testFile in TestFileHelper.GetTestFiles()) | ||
{ | ||
CanGenerateFromFile(testFile); | ||
} | ||
} | ||
|
||
[Test] | ||
public void CanGenerateGivenWhenThenDuplicationFeatureFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "givenwhenthenduplication.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateMixedGWTFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "mixedgivenwhenthen.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateMultilineargumentFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "multilineargument.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateMultilinetitleFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "multilinetitle.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateScneriooutlineFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "scenariooutline.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateSimpleFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "simple.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateTableargumentFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "tableargument.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateTagsFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "tags.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGenerateWhitespacesFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "whitespaces.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGeneratebackgroundFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "background.feature")); | ||
} | ||
|
||
[Test] | ||
public void CanGeneratebackgroundWithTitleFeature() | ||
{ | ||
string folder = Path.GetFullPath(Path.Combine(TestFileHelper.GetProjectLocation(), "TestFiles")); | ||
CanGenerateFromFile(Path.Combine(folder, "background_withtitle.feature")); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters