Skip to content

Commit 8cf03b2

Browse files
authored
Merge pull request #12 from ful-stackz/task/support-structs
Add support for structs
2 parents c9fe709 + 2ca59c4 commit 8cf03b2

15 files changed

Lines changed: 777 additions & 31 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515
- Code coverage, via CodeCov
1616
- Support for generating XML summary documentation ([Zaid Ajaj](https://github.com/Zaid-Ajaj))
1717
- [StyleCop.Analyzer](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) and [SonarAnalyzer.CSharp](https://github.com/SonarSource/sonar-dotnet)
18+
- Support for structs generation
1819

1920
## [0.1.0] - 2020-09-26
2021

src/SharpCode.Test/NamespaceBuilderTests.cs

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Generic;
12
using NUnit.Framework;
23

34
namespace SharpCode.Test
@@ -279,6 +280,31 @@ public void CreatingNamespace_ValidatesMembersAccessModifiers()
279280
.ToSourceCode(),
280281
"Generating the source code for a protected internal class inside a namespace should throw an exception.");
281282

283+
// -- Structs
284+
Assert.Throws<SyntaxException>(
285+
() => Code.CreateNamespace("Test")
286+
.WithStruct(Code.CreateStruct("Test", AccessModifier.Private))
287+
.ToSourceCode(),
288+
"Generating the source code for a private struct inside a namespace should throw an exception.");
289+
290+
Assert.Throws<SyntaxException>(
291+
() => Code.CreateNamespace("Test")
292+
.WithStruct(Code.CreateStruct("Test", AccessModifier.PrivateInternal))
293+
.ToSourceCode(),
294+
"Generating the source code for a private internal struct inside a namespace should throw an exception.");
295+
296+
Assert.Throws<SyntaxException>(
297+
() => Code.CreateNamespace("Test")
298+
.WithStruct(Code.CreateStruct("Test", AccessModifier.Protected))
299+
.ToSourceCode(),
300+
"Generating the source code for a protected struct inside a namespace should throw an exception.");
301+
302+
Assert.Throws<SyntaxException>(
303+
() => Code.CreateNamespace("Test")
304+
.WithStruct(Code.CreateStruct("Test", AccessModifier.ProtectedInternal))
305+
.ToSourceCode(),
306+
"Generating the source code for a protected internal struct inside a namespace should throw an exception.");
307+
282308
// -- Interfaces
283309
Assert.Throws<SyntaxException>(
284310
() => Code.CreateNamespace("Test")
@@ -367,5 +393,145 @@ int HiddenCount
367393

368394
Assert.AreEqual(expectedCode, generatedCode);
369395
}
396+
397+
[Test]
398+
public void CreatingNamespace_WithStruct_Works()
399+
{
400+
var generatedCode = Code.CreateNamespace()
401+
.WithName("Geometry")
402+
.WithStruct(Code.CreateStruct()
403+
.WithAccessModifier(AccessModifier.Public)
404+
.WithName("Cube")
405+
.WithSummary("Represents a geometrical cube.")
406+
.WithProperty(Code.CreateProperty("int", "Side").WithSummary("Gets or sets the length of the cube side.")))
407+
.ToSourceCode()
408+
.WithUnixEOL();
409+
410+
var expectedCode = @"
411+
namespace Geometry
412+
{
413+
/// <summary>
414+
/// Represents a geometrical cube.
415+
/// </summary>
416+
public struct Cube
417+
{
418+
/// <summary>
419+
/// Gets or sets the length of the cube side.
420+
/// </summary>
421+
public int Side
422+
{
423+
get;
424+
set;
425+
}
426+
}
427+
}
428+
".Trim().WithUnixEOL();
429+
430+
Assert.AreEqual(expectedCode, generatedCode);
431+
}
432+
433+
[Test]
434+
public void NamespaceBuilder_WithStructs_ApisYieldIdenticalResults()
435+
{
436+
var enumerableApi = Code.CreateNamespace("Test")
437+
.WithStructs(new List<StructBuilder>
438+
{
439+
Code.CreateStruct("Position"),
440+
Code.CreateStruct("Location"),
441+
})
442+
.ToSourceCode();
443+
444+
var paramsApi = Code.CreateNamespace("Test")
445+
.WithStructs(
446+
Code.CreateStruct("Position"),
447+
Code.CreateStruct("Location"))
448+
.ToSourceCode();
449+
450+
Assert.AreEqual(enumerableApi, paramsApi);
451+
}
452+
453+
[Test]
454+
public void NamespaceBuilder_WithClasses_ApisYieldIdenticalResults()
455+
{
456+
var enumerableApi = Code.CreateNamespace("Test")
457+
.WithClasses(new List<ClassBuilder>
458+
{
459+
Code.CreateClass()
460+
.WithAccessModifier(AccessModifier.Internal)
461+
.WithName("Tester"),
462+
Code.CreateClass()
463+
.WithAccessModifier(AccessModifier.Public)
464+
.WithName("PublicTester"),
465+
})
466+
.ToSourceCode();
467+
468+
var paramsApi = Code.CreateNamespace("Test")
469+
.WithClasses(
470+
Code.CreateClass()
471+
.WithAccessModifier(AccessModifier.Internal)
472+
.WithName("Tester"),
473+
Code.CreateClass()
474+
.WithAccessModifier(AccessModifier.Public)
475+
.WithName("PublicTester"))
476+
.ToSourceCode();
477+
478+
Assert.AreEqual(enumerableApi, paramsApi);
479+
}
480+
481+
[Test]
482+
public void NamespaceBuilder_WithInterfaces_ApisYieldIdenticalResults()
483+
{
484+
var enumerableApi = Code.CreateNamespace("Test")
485+
.WithInterfaces(new List<InterfaceBuilder>
486+
{
487+
Code.CreateInterface()
488+
.WithAccessModifier(AccessModifier.Internal)
489+
.WithName("ITester"),
490+
Code.CreateInterface()
491+
.WithAccessModifier(AccessModifier.Public)
492+
.WithName("IPublicTester"),
493+
})
494+
.ToSourceCode();
495+
496+
var paramsApi = Code.CreateNamespace("Test")
497+
.WithInterfaces(
498+
Code.CreateInterface()
499+
.WithAccessModifier(AccessModifier.Internal)
500+
.WithName("ITester"),
501+
Code.CreateInterface()
502+
.WithAccessModifier(AccessModifier.Public)
503+
.WithName("IPublicTester"))
504+
.ToSourceCode();
505+
506+
Assert.AreEqual(enumerableApi, paramsApi);
507+
}
508+
509+
[Test]
510+
public void NamespaceBuilder_WithEnums_ApisYieldIdenticalResults()
511+
{
512+
var enumerableApi = Code.CreateNamespace("Test")
513+
.WithEnums(new List<EnumBuilder>
514+
{
515+
Code.CreateEnum()
516+
.WithAccessModifier(AccessModifier.Internal)
517+
.WithName("UserStatus"),
518+
Code.CreateEnum()
519+
.WithAccessModifier(AccessModifier.Public)
520+
.WithName("TestStatus"),
521+
})
522+
.ToSourceCode();
523+
524+
var paramsApi = Code.CreateNamespace("Test")
525+
.WithEnums(
526+
Code.CreateEnum()
527+
.WithAccessModifier(AccessModifier.Internal)
528+
.WithName("UserStatus"),
529+
Code.CreateEnum()
530+
.WithAccessModifier(AccessModifier.Public)
531+
.WithName("TestStatus"))
532+
.ToSourceCode();
533+
534+
Assert.AreEqual(enumerableApi, paramsApi);
535+
}
370536
}
371537
}

0 commit comments

Comments
 (0)