Skip to content

Commit a8fff0b

Browse files
Avoid redundant NativeAOT test rebuild
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent c120c9a commit a8fff0b

1 file changed

Lines changed: 15 additions & 13 deletions

File tree

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/TrimmableTypeMapBuildTests.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -188,36 +188,38 @@ public R8JniPeer () { }
188188
"Disabling public mapping output should omit the ProGuard mapping from app-bundle metadata.");
189189
}
190190

191-
var outputTimestamps = rewrittenAssemblies
191+
IEnumerable<string> outputFiles = rewrittenAssemblies
192192
.Append (seedMapping)
193193
.Append (rewriteManifest)
194194
.Append (reachabilityManifest)
195-
.Append (finalMapping)
196-
.ToDictionary (path => path, File.GetLastWriteTimeUtc, StringComparer.Ordinal);
195+
.Append (finalMapping);
197196
string? ilcRspFile = null;
197+
string? ilcRspContent = null;
198198
if (runtime == AndroidRuntime.NativeAOT) {
199199
ilcRspFile = FindSingleFile (projectDirectory, $"{proj.ProjectName}.ilc.rsp");
200-
StringAssert.Contains ("r8-jni-rewritten", File.ReadAllText (ilcRspFile), "ILC should compile the rewritten managed inputs.");
200+
ilcRspContent = File.ReadAllText (ilcRspFile);
201+
StringAssert.Contains ("r8-jni-rewritten", ilcRspContent, "ILC should compile the rewritten managed inputs.");
202+
outputFiles = outputFiles.Append (ilcRspFile);
201203
}
204+
var outputTimestamps = outputFiles.ToDictionary (path => path, File.GetLastWriteTimeUtc, StringComparer.Ordinal);
202205

203206
Assert.IsTrue (builder.Build (proj, doNotCleanupOnUpdate: true, saveProject: false), "No-op R8 JNI name-rewriting build should have succeeded.");
204207
builder.Output.AssertTargetIsSkipped ("_AndroidCompileR8JniSeedJava");
205208
builder.Output.AssertTargetIsSkipped ("_AndroidGenerateR8JniSeedMapping");
206209
builder.Output.AssertTargetIsSkipped (runtime == AndroidRuntime.CoreCLR
207210
? "_AndroidRewriteJniNamesBeforeILLink"
208211
: "_AndroidRewriteJniNamesBeforeIlc");
209-
builder.Output.AssertTargetIsSkipped ("_CompileToDalvik");
210-
foreach (var pair in outputTimestamps) {
211-
Assert.AreEqual (pair.Value, File.GetLastWriteTimeUtc (pair.Key), $"No-op build should preserve {pair.Key}.");
212-
}
213-
214212
if (runtime == AndroidRuntime.NativeAOT) {
215-
File.Delete (ilcRspFile);
216-
Assert.IsTrue (builder.Build (proj, doNotCleanupOnUpdate: true, saveProject: false), "ILC response-file regeneration build should have succeeded.");
217-
builder.Output.AssertTargetIsSkipped ("_AndroidRewriteJniNamesBeforeIlc");
218213
builder.Output.AssertTargetIsNotSkipped ("WriteIlcRspFileForCompilation");
219214
FileAssert.Exists (ilcRspFile);
220-
StringAssert.Contains ("r8-jni-rewritten", File.ReadAllText (ilcRspFile), "A regenerated ILC response file should retain rewritten managed inputs when the rewrite target is skipped.");
215+
string actualIlcRspContent = File.ReadAllText (ilcRspFile);
216+
StringAssert.Contains ("r8-jni-rewritten", actualIlcRspContent, "ILC response-file recomputation should retain rewritten managed inputs when the rewrite target is skipped.");
217+
Assert.AreEqual (ilcRspContent, actualIlcRspContent, "ILC response-file recomputation should preserve rewritten managed inputs when the rewrite target is skipped.");
218+
Assert.AreEqual (outputTimestamps [ilcRspFile], File.GetLastWriteTimeUtc (ilcRspFile), "An unchanged ILC response file should preserve its timestamp.");
219+
}
220+
builder.Output.AssertTargetIsSkipped ("_CompileToDalvik");
221+
foreach (var pair in outputTimestamps) {
222+
Assert.AreEqual (pair.Value, File.GetLastWriteTimeUtc (pair.Key), $"No-op build should preserve {pair.Key}.");
221223
}
222224

223225
System.Threading.Thread.Sleep (1100);

0 commit comments

Comments
 (0)