diff --git a/Sybil.IntegrationTests/FlowTests.cs b/Sybil.IntegrationTests/FlowTests.cs index 626dce5..a8fbdcd 100644 --- a/Sybil.IntegrationTests/FlowTests.cs +++ b/Sybil.IntegrationTests/FlowTests.cs @@ -23,6 +23,7 @@ namespace TestNamespace this.PropertyString = string.Empty; } + private string someTypeString = $""{typeof(string)}""; [SomeAttribute2] private string fieldString; [SomeAttribute3(typeof(String))] @@ -64,6 +65,10 @@ namespace TestNamespace .WithNullArgument()) .WithParameter("string", "fieldString") .WithBody("this.fieldString = fieldString ?? throw new ArgumentNullException();\rthis.PropertyString = string.Empty;")) + .WithField( + SyntaxBuilder.CreateField("string", "someTypeString") + .WithModifier("private") + .WithInitializer("$\"{typeof(string)}\"")) .WithField( SyntaxBuilder.CreateField("string", "fieldString") .WithAttribute(SyntaxBuilder.CreateAttribute("SomeAttribute2")) diff --git a/Sybil.UnitTests/FieldBuilderTests.cs b/Sybil.UnitTests/FieldBuilderTests.cs index 9d9fbfc..63bb921 100644 --- a/Sybil.UnitTests/FieldBuilderTests.cs +++ b/Sybil.UnitTests/FieldBuilderTests.cs @@ -14,6 +14,8 @@ public class FieldBuilderTests private const string FieldType = "string"; private const string PublicField = "public string someString;"; private const string PublicSealedField = "public sealed string someString;"; + private const string PublicSealedWithInitializer = "public sealed string someString = someValue;"; + private const string Initializer = "someValue"; private readonly FieldBuilder builder; @@ -105,4 +107,25 @@ public class FieldBuilderTests result.Should().Be(PublicSealedField); } + + [TestMethod] + public void WithInitializer_NullInitializer_ThrowsArgumentNullException() + { + var action = () => + { + this.builder.WithInitializer(null); + }; + + action.Should().Throw(); + } + + [TestMethod] + public void WithInitializer_ReturnsExpectedString() + { + var result = this.builder.WithModifiers(PublicSealed) + .WithInitializer(Initializer).Build().ToFullString(); + + + result.Should().Be(PublicSealedWithInitializer); + } } \ No newline at end of file diff --git a/Sybil/FieldBuilder.cs b/Sybil/FieldBuilder.cs index 066c2d6..af6778a 100644 --- a/Sybil/FieldBuilder.cs +++ b/Sybil/FieldBuilder.cs @@ -50,6 +50,23 @@ namespace Sybil return this; } + public FieldBuilder WithInitializer(string initializer) + { + if (string.IsNullOrWhiteSpace(initializer)) + { + throw new ArgumentNullException(nameof(initializer)); + } + + var variableDeclaration = this.FieldDeclarationSyntax.Declaration.Variables[0]; + variableDeclaration = variableDeclaration.WithInitializer(SyntaxFactory.EqualsValueClause(SyntaxFactory.ParseExpression(initializer))); + this.FieldDeclarationSyntax = this.FieldDeclarationSyntax + .WithDeclaration( + this.FieldDeclarationSyntax.Declaration + .WithVariables(SyntaxFactory.SeparatedList(new SyntaxNodeOrToken[] { variableDeclaration }))); + + return this; + } + public FieldDeclarationSyntax Build() { if (this.attributeBuilders.Count > 0) diff --git a/Sybil/Sybil.csproj b/Sybil/Sybil.csproj index 3d3337e..e888a3e 100644 --- a/Sybil/Sybil.csproj +++ b/Sybil/Sybil.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.4.1 + 0.5.0