Skip to content

Commit cd05d57

Browse files
committed
use snapshots for tests
1 parent 9bb16d7 commit cd05d57

9 files changed

Lines changed: 175 additions & 23 deletions

test/AWS.AgentCore.SourceGenerator.UnitTests/AWS.AgentCore.SourceGenerator.UnitTests.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,11 @@
1919
<ProjectReference Include="..\..\src\AWS.AgentCore.SourceGenerator\AWS.AgentCore.SourceGenerator.csproj" />
2020
</ItemGroup>
2121

22+
<ItemGroup>
23+
<Content Include="Snapshots\**\*.g.cs">
24+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
25+
</Content>
26+
<Compile Remove="Snapshots\**" />
27+
</ItemGroup>
28+
2229
</Project>

test/AWS.AgentCore.SourceGenerator.UnitTests/AgentCoreStartupGeneratorTests.cs

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace AWS.AgentCore.SourceGenerator.UnitTests;
66
public class AgentCoreStartupGeneratorTests
77
{
88
[Fact]
9-
public void Generator_WithStartupAndAgent_EmitsProgram()
9+
public async Task Generator_WithStartupAndAgent_EmitsProgram()
1010
{
1111
var source = @"
1212
using AWS.AgentCore;
@@ -34,18 +34,14 @@ public Task<string> Handle(PromptRequest request, AgentCoreRuntimeContext contex
3434
}";
3535

3636
var result = GeneratorTestHelper.RunGenerator(source);
37+
var expected = await ReadSnapshot("StartupAndAgent.g.cs");
3738

3839
Assert.NotNull(result.GeneratedSource);
39-
Assert.Contains("var builder = WebApplication.CreateBuilder(args);", result.GeneratedSource);
40-
Assert.Contains("var startup = new TestApp.Startup();", result.GeneratedSource);
41-
Assert.Contains("startup.ConfigureServices(builder);", result.GeneratedSource);
42-
Assert.Contains("builder.Services.AddTransient<TestApp.MyAgent>();", result.GeneratedSource);
43-
Assert.Contains("app.MapAgentCore<TestApp.PromptRequest>(", result.GeneratedSource);
44-
Assert.Contains("agent.Handle(request, context, ct)", result.GeneratedSource);
40+
Assert.Equal(expected, result.GeneratedSource);
4541
}
4642

4743
[Fact]
48-
public void Generator_WithPingHandler_EmitsPingDelegate()
44+
public async Task Generator_WithPingHandler_EmitsPingDelegate()
4945
{
5046
var source = @"
5147
using AWS.AgentCore;
@@ -70,14 +66,14 @@ public Task<string> Handle(PromptRequest request, CancellationToken ct)
7066
}";
7167

7268
var result = GeneratorTestHelper.RunGenerator(source);
69+
var expected = await ReadSnapshot("WithPingHandler.g.cs");
7370

7471
Assert.NotNull(result.GeneratedSource);
75-
Assert.Contains("pingHandler:", result.GeneratedSource);
76-
Assert.Contains("agent.Ping()", result.GeneratedSource);
72+
Assert.Equal(expected, result.GeneratedSource);
7773
}
7874

7975
[Fact]
80-
public void Generator_WithoutStartup_SkipsConfigureServices()
76+
public async Task Generator_WithoutStartup_SkipsConfigureServices()
8177
{
8278
var source = @"
8379
using AWS.AgentCore;
@@ -99,14 +95,14 @@ public Task<string> Handle(PromptRequest request, CancellationToken ct)
9995
}";
10096

10197
var result = GeneratorTestHelper.RunGenerator(source);
98+
var expected = await ReadSnapshot("WithoutStartup.g.cs");
10299

103100
Assert.NotNull(result.GeneratedSource);
104-
Assert.DoesNotContain("ConfigureServices", result.GeneratedSource);
105-
Assert.Contains("builder.Services.AddTransient<TestApp.MyAgent>();", result.GeneratedSource);
101+
Assert.Equal(expected, result.GeneratedSource);
106102
}
107103

108104
[Fact]
109-
public void Generator_WithoutInvocation_EmitsNothing()
105+
public void Generator_WithoutHandler_EmitsNothing()
110106
{
111107
var source = @"
112108
using AWS.AgentCore;
@@ -126,7 +122,7 @@ public void ConfigureServices(Microsoft.AspNetCore.Builder.WebApplicationBuilder
126122
}
127123

128124
[Fact]
129-
public void Generator_StreamingHandler_DetectsReturnType()
125+
public async Task Generator_StreamingHandler_DetectsReturnType()
130126
{
131127
var source = @"
132128
using AWS.AgentCore;
@@ -148,14 +144,14 @@ public IAsyncEnumerable<string> Handle(PromptRequest request, CancellationToken
148144
}";
149145

150146
var result = GeneratorTestHelper.RunGenerator(source);
147+
var expected = await ReadSnapshot("StreamingHandler.g.cs");
151148

152149
Assert.NotNull(result.GeneratedSource);
153-
Assert.Contains("app.MapAgentCore<TestApp.PromptRequest>(", result.GeneratedSource);
154-
Assert.Contains("agent.Handle(request, ct)", result.GeneratedSource);
150+
Assert.Equal(expected, result.GeneratedSource);
155151
}
156152

157153
[Fact]
158-
public void Generator_RequestOnlyParameter_IdentifiesRequestType()
154+
public async Task Generator_RequestOnlyParameter_IdentifiesRequestType()
159155
{
160156
var source = @"
161157
using AWS.AgentCore;
@@ -176,13 +172,14 @@ public Task<string> Handle(MyRequest request)
176172
}";
177173

178174
var result = GeneratorTestHelper.RunGenerator(source);
175+
var expected = await ReadSnapshot("RequestOnly.g.cs");
179176

180177
Assert.NotNull(result.GeneratedSource);
181-
Assert.Contains("app.MapAgentCore<TestApp.MyRequest>(", result.GeneratedSource);
178+
Assert.Equal(expected, result.GeneratedSource);
182179
}
183180

184181
[Fact]
185-
public void Generator_GlobalNamespace_HandlesCorrectly()
182+
public async Task Generator_GlobalNamespace_HandlesCorrectly()
186183
{
187184
var source = @"
188185
using AWS.AgentCore;
@@ -200,9 +197,16 @@ public Task<string> Handle(PromptRequest request)
200197
}";
201198

202199
var result = GeneratorTestHelper.RunGenerator(source);
200+
var expected = await ReadSnapshot("GlobalNamespace.g.cs");
203201

204202
Assert.NotNull(result.GeneratedSource);
205-
Assert.Contains("builder.Services.AddTransient<MyAgent>();", result.GeneratedSource);
206-
Assert.Contains("app.MapAgentCore<PromptRequest>(", result.GeneratedSource);
203+
Assert.Equal(expected, result.GeneratedSource);
204+
}
205+
206+
private static async Task<string> ReadSnapshot(string fileName)
207+
{
208+
var path = Path.Combine("Snapshots", fileName);
209+
var content = await File.ReadAllTextAsync(path);
210+
return content.ReplaceLineEndings("\n");
207211
}
208212
}

test/AWS.AgentCore.SourceGenerator.UnitTests/GeneratorTestHelper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ public class WebApplicationBuilder { }
6969
var generatedSource = runResult.GeneratedTrees
7070
.FirstOrDefault(t => t.FilePath.Contains("AgentCore_GeneratedProgram"))
7171
?.GetText()
72-
.ToString();
72+
.ToString()
73+
?.ReplaceLineEndings("\n");
7374

7475
return new GeneratorResult
7576
{
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// <auto-generated/>
2+
// Generated by AWS.AgentCore.SourceGenerator
3+
4+
using AWS.AgentCore;
5+
using AWS.AgentCore.Extensions;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
var builder = WebApplication.CreateBuilder(args);
9+
10+
builder.Services.AddTransient<MyAgent>();
11+
12+
var app = builder.Build();
13+
14+
app.MapAgentCore<PromptRequest>(
15+
handler: (PromptRequest request) =>
16+
{
17+
var agent = app.Services.GetRequiredService<MyAgent>();
18+
return agent.Handle(request);
19+
}
20+
);
21+
22+
app.Run();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// <auto-generated/>
2+
// Generated by AWS.AgentCore.SourceGenerator
3+
4+
using AWS.AgentCore;
5+
using AWS.AgentCore.Extensions;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
var builder = WebApplication.CreateBuilder(args);
9+
10+
builder.Services.AddTransient<TestApp.MyAgent>();
11+
12+
var app = builder.Build();
13+
14+
app.MapAgentCore<TestApp.MyRequest>(
15+
handler: (TestApp.MyRequest request) =>
16+
{
17+
var agent = app.Services.GetRequiredService<TestApp.MyAgent>();
18+
return agent.Handle(request);
19+
}
20+
);
21+
22+
app.Run();
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// <auto-generated/>
2+
// Generated by AWS.AgentCore.SourceGenerator
3+
4+
using AWS.AgentCore;
5+
using AWS.AgentCore.Extensions;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
var builder = WebApplication.CreateBuilder(args);
9+
10+
var startup = new TestApp.Startup();
11+
startup.ConfigureServices(builder);
12+
13+
builder.Services.AddTransient<TestApp.MyAgent>();
14+
15+
var app = builder.Build();
16+
17+
app.MapAgentCore<TestApp.PromptRequest>(
18+
handler: (TestApp.PromptRequest request, AWS.AgentCore.AgentCoreRuntimeContext context, System.Threading.CancellationToken ct) =>
19+
{
20+
var agent = app.Services.GetRequiredService<TestApp.MyAgent>();
21+
return agent.Handle(request, context, ct);
22+
}
23+
);
24+
25+
app.Run();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// <auto-generated/>
2+
// Generated by AWS.AgentCore.SourceGenerator
3+
4+
using AWS.AgentCore;
5+
using AWS.AgentCore.Extensions;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
var builder = WebApplication.CreateBuilder(args);
9+
10+
builder.Services.AddTransient<TestApp.MyAgent>();
11+
12+
var app = builder.Build();
13+
14+
app.MapAgentCore<TestApp.PromptRequest>(
15+
handler: (TestApp.PromptRequest request, System.Threading.CancellationToken ct) =>
16+
{
17+
var agent = app.Services.GetRequiredService<TestApp.MyAgent>();
18+
return agent.Handle(request, ct);
19+
}
20+
);
21+
22+
app.Run();
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// <auto-generated/>
2+
// Generated by AWS.AgentCore.SourceGenerator
3+
4+
using AWS.AgentCore;
5+
using AWS.AgentCore.Extensions;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
var builder = WebApplication.CreateBuilder(args);
9+
10+
builder.Services.AddTransient<TestApp.MyAgent>();
11+
12+
var app = builder.Build();
13+
14+
app.MapAgentCore<TestApp.PromptRequest>(
15+
handler: (TestApp.PromptRequest request, System.Threading.CancellationToken ct) =>
16+
{
17+
var agent = app.Services.GetRequiredService<TestApp.MyAgent>();
18+
return agent.Handle(request, ct);
19+
}
20+
, pingHandler: () =>
21+
{
22+
var agent = app.Services.GetRequiredService<TestApp.MyAgent>();
23+
return agent.Ping();
24+
}
25+
);
26+
27+
app.Run();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// <auto-generated/>
2+
// Generated by AWS.AgentCore.SourceGenerator
3+
4+
using AWS.AgentCore;
5+
using AWS.AgentCore.Extensions;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
var builder = WebApplication.CreateBuilder(args);
9+
10+
builder.Services.AddTransient<TestApp.MyAgent>();
11+
12+
var app = builder.Build();
13+
14+
app.MapAgentCore<TestApp.PromptRequest>(
15+
handler: (TestApp.PromptRequest request, System.Threading.CancellationToken ct) =>
16+
{
17+
var agent = app.Services.GetRequiredService<TestApp.MyAgent>();
18+
return agent.Handle(request, ct);
19+
}
20+
);
21+
22+
app.Run();

0 commit comments

Comments
 (0)