From c6d8b49f13b88cec124808ab3ed40ee0d9d48d7d Mon Sep 17 00:00:00 2001 From: filzrev <103790468+filzrev@users.noreply.github.com> Date: Sat, 22 Aug 2026 21:33:45 +0900 Subject: [PATCH 1/3] chore: modify powercfg output parse logics --- .../PowerRequestsParser.cs | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs b/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs index 8dac936259..f2af66fc10 100644 --- a/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs +++ b/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs @@ -116,7 +116,7 @@ private static IEnumerable Tokens(string input) { yield return new Token(TokenType.RequestType, line.Substring(0, line.Length - 1).ToString()); } - else if (string.Equals(line, "None.", StringComparison.InvariantCulture)) + else if (IsNoneToken(line)) { yield return new Token(TokenType.None, line); } @@ -164,6 +164,27 @@ public Token Take(TokenType requestType) public void Dispose() => tokens.Dispose(); } + private static bool IsNoneToken(string line) + { + // Note: This mapping don't cover all available Windows UI Language. + switch (line) + { + case "None.": // English + case "Keine.": // German + case "Aucune.": // French + case "Ninguna.": // Spanish + case "Nessuna.": // Italian + case "Geen.": // Dutch + case "Brak.": // Polish + case "なし。": // Japanese + case "无。": // Simplified Chinese + case "無。": // Traditional Chinese + return true; + default: + return false; + } + } + private enum TokenType { EmptyLine, From f177ff25ca4b9ba7da45822010816e966d8888c8 Mon Sep 17 00:00:00 2001 From: filzrev <103790468+filzrev@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:39:45 +0900 Subject: [PATCH 2/3] chore: update skip logics based on review comment --- .../PowerRequestsParser.cs | 36 ++++++------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs b/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs index f2af66fc10..2a55ced74c 100644 --- a/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs +++ b/tests/BenchmarkDotNet.IntegrationTests/PowerRequestsParser.cs @@ -106,29 +106,36 @@ private static IEnumerable Tokens(string input) // return an empty string when CR is followed by LF. StringReader reader = new StringReader(input); string? line; + TokenType previousTokenType = TokenType.None; while ((line = reader.ReadLine()) != null) { if (line.Length == 0) { yield return new Token(TokenType.EmptyLine, ""); + previousTokenType = TokenType.EmptyLine; } else if (line[line.Length - 1] == ':') { yield return new Token(TokenType.RequestType, line.Substring(0, line.Length - 1).ToString()); - } - else if (IsNoneToken(line)) - { - yield return new Token(TokenType.None, line); + previousTokenType = TokenType.RequestType; } else if (line[0] == '[') { int pos = line.IndexOf(']'); yield return new Token(TokenType.RequesterType, line.Substring(1, pos - 1)); yield return new Token(TokenType.RequesterName, line.Substring(pos + 2)); + previousTokenType = TokenType.RequesterName; + } + else if (previousTokenType == TokenType.RequestType) + { + // Any single line directly after a request type header is the localized "None." + yield return new Token(TokenType.None, line); + previousTokenType = TokenType.None; } else { yield return new Token(TokenType.Reason, line); + previousTokenType = TokenType.Reason; } } } @@ -164,27 +171,6 @@ public Token Take(TokenType requestType) public void Dispose() => tokens.Dispose(); } - private static bool IsNoneToken(string line) - { - // Note: This mapping don't cover all available Windows UI Language. - switch (line) - { - case "None.": // English - case "Keine.": // German - case "Aucune.": // French - case "Ninguna.": // Spanish - case "Nessuna.": // Italian - case "Geen.": // Dutch - case "Brak.": // Polish - case "なし。": // Japanese - case "无。": // Simplified Chinese - case "無。": // Traditional Chinese - return true; - default: - return false; - } - } - private enum TokenType { EmptyLine, From 0e90e56b342106bd121ef678e778325aeafa8790 Mon Sep 17 00:00:00 2001 From: filzrev <103790468+filzrev@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:43:06 +0900 Subject: [PATCH 3/3] chore: add finally block --- .../BenchmarkDotNet.IntegrationTests/WakeLockTests.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/BenchmarkDotNet.IntegrationTests/WakeLockTests.cs b/tests/BenchmarkDotNet.IntegrationTests/WakeLockTests.cs index f9cc6fef84..39b64e0f4f 100644 --- a/tests/BenchmarkDotNet.IntegrationTests/WakeLockTests.cs +++ b/tests/BenchmarkDotNet.IntegrationTests/WakeLockTests.cs @@ -99,8 +99,14 @@ public async Task BenchmarkRunnerAcquiresWakeLock(Type type, string expected) async Task WaitForBenchmarkRunningAndGetPowerRequests() { await AsTask(ping, testTimeout); - pwrRequests = GetPowerRequests("BenchmarkDotNet Running Benchmarks"); - pong.Set(); + try + { + pwrRequests = GetPowerRequests("BenchmarkDotNet Running Benchmarks"); + } + finally + { + pong.Set(); + } } }