Skip to content

Commit 4c591ed

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

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
@@ -189,36 +189,38 @@ public R8JniPeer () { }
189189
"Disabling public mapping output should omit the ProGuard mapping from app-bundle metadata.");
190190
}
191191

192-
var outputTimestamps = rewrittenAssemblies
192+
IEnumerable<string> outputFiles = rewrittenAssemblies
193193
.Append (seedMapping)
194194
.Append (rewriteManifest)
195195
.Append (reachabilityManifest)
196-
.Append (finalMapping)
197-
.ToDictionary (path => path, File.GetLastWriteTimeUtc, StringComparer.Ordinal);
196+
.Append (finalMapping);
198197
string? ilcRspFile = null;
198+
string? ilcRspContent = null;
199199
if (runtime == AndroidRuntime.NativeAOT) {
200200
ilcRspFile = FindSingleFile (projectDirectory, $"{proj.ProjectName}.ilc.rsp");
201-
StringAssert.Contains ("r8-jni-rewritten", File.ReadAllText (ilcRspFile), "ILC should compile the rewritten managed inputs.");
201+
ilcRspContent = File.ReadAllText (ilcRspFile);
202+
StringAssert.Contains ("r8-jni-rewritten", ilcRspContent, "ILC should compile the rewritten managed inputs.");
203+
outputFiles = outputFiles.Append (ilcRspFile);
202204
}
205+
var outputTimestamps = outputFiles.ToDictionary (path => path, File.GetLastWriteTimeUtc, StringComparer.Ordinal);
203206

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

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

0 commit comments

Comments
 (0)