)]}'
{
  "commit": "bbef902eb5d5c19c8b2c60f28ee29b3ae3f13be0",
  "tree": "737693eb80160e43d937c26435edc13a6dfb4b8c",
  "parents": [
    "894624e15c9f034c9983d0124016ce98c9be5a10"
  ],
  "author": {
    "name": "Elijah Okoroh",
    "email": "okorohelijah@google.com",
    "time": "Thu Sep 24 20:59:52 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Sep 24 20:59:52 2026 +0000"
  },
  "message": "[tool] Accept plutil diagnostics from stderr in plist_parser_test (macOS 26) (#193292)\n\nFixes https://github.com/flutter/flutter/issues/193159\n\n## What\u0027s failing\n\nTwo tests in `plist_parser_test.dart` fail on macOS 26 (first seen on\n`staging.shadow/Mac tool_integration_tests_1` at Mac-26.6.2 / Xcode\n17C52,\nhttps://ci.chromium.org/b/8670252478857878881):\n\n- `PlistParser.getValueFromFile\u003cString\u003e returns null for a malformed\nplist file`\n- `PlistParser.replaceKey returns false for a malformed plist file`\n\nBoth tests still get the right result (`null` / `false`, and `plutil`\nstill\nexits 1). What changed is where `plutil` prints its error:\n\n- Before macOS 26, `plutil` printed `\u003cpath\u003e: Property List error: … /\nJSON error: …`\n  on **stdout**.\n- On macOS 26, `plutil` was rewritten (Apple open-sourced the new\nversion in\nswift-corelibs-foundation, `Sources/plutil/PLUContext.swift`) and the\nsame\n  message now goes to **stderr**.\n\n`ProcessUtils.runSync` logs a failed command\u0027s stdout with `printStatus`\nand\nits stderr with `printError`. So on macOS 26 `logger.statusText` is\nempty and\nthe diagnostic shows up in `logger.errorText` instead, ahead of the\n`ProcessException:` line. The tests only looked at `statusText`.\n\n#172913 ran into the same plutil change last year in\n`xcode_backend.dart`.\n\n## The fix\n\nTest-only change. `PlistParser` itself is fine.\n\n- Look for the plutil diagnostic in `statusText + errorText` rather than\n`statusText` alone, so the test passes whichever stream plutil uses. The\nfull message is still asserted, so a change in the wording would still\nbe\n  caught.\n- Check that `errorText` ends with the `ProcessException` block instead\nof\n  equalling it, since on macOS 26 the plutil message now comes first.\n\n## How I verified it\n\n- Ran the tests locally.\n- led run of `Mac tool_integration_tests_1` (subshard `1_10`, the one\nthat\ncontains `plist_parser_test.dart`) on a Mac-26.6.2 bot (`mac-340-g140`,\n  the same bot as the original failure) at this PR\u0027s head:\nhttps://ci.chromium.org/b/8669753954317678657 — green, both tests pass.\n\n## Pre-launch Checklist\n\n- [x] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [x] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [x] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [x] I signed the [CLA].\n- [x] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant documentation (doc comments with `///`).\n- [x] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [x] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [x] All existing and new tests are passing.\n\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bf517bec489255cfe84d86ebb408933fba956ddd",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/integration.shard/plist_parser_test.dart",
      "new_id": "a827fbe6b1d5bdac32e484ef6f1f8e2ebb440898",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/plist_parser_test.dart"
    }
  ]
}
