)]}'
{
  "commit": "04db01f3000a2779e299a8a7ba48489cf90a02f3",
  "tree": "9371b5818dcb4c94620357171475e47df7586f0d",
  "parents": [
    "692b51763d45cc4d574a06cf3d7b9b36f69c5170"
  ],
  "author": {
    "name": "Samuel Abada",
    "email": "abadasamuelosp@gmail.com",
    "time": "Tue Feb 24 10:35:08 2026 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Feb 24 18:35:08 2026 +0000"
  },
  "message": "feat: Add --no-uninstall flag to flutter test for integration tests (#182714)\n\n## Description\n\nAdd `--no-uninstall` flag to `flutter test` to skip app uninstallation\nafter integration tests complete.\n\nWhen running integration tests on Android (`flutter test\nintegration_test/`), the `IntegrationTestTestDevice.kill()` method\nalways calls `device.uninstallApp()` after tests finish. For Device\nPolicy Manager (DPM) apps, Android prevents uninstallation, causing the\nerror:\n\n```bash\nadb uninstall failed: Failure [DELETE_FAILED_DEVICE_POLICY_MANAGER]\n```\n\nThis PR adds a `--uninstall` flag (defaulting to true) to `flutter\ntest`, so users can pass `--no-uninstall` to skip the post-test\nuninstallation step:\n\n```bash\nflutter test integration_test/ --no-uninstall\n```\n\nFixes #166709 \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.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "eaac1ade1a39f72acb8a45ca3906da0e93992168",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/commands/test.dart",
      "new_id": "cbb40ea451b26d408ac7cd576da103ae446636fc",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/commands/test.dart"
    },
    {
      "type": "modify",
      "old_id": "f67e69b67c86d732d497e5e323f102b5207f0401",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/device.dart",
      "new_id": "bd93029e3229d90718f4af68928805af6e2ff9e8",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/device.dart"
    },
    {
      "type": "modify",
      "old_id": "0c6d0b6722075a70902d577a90544f293c1757ab",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/test/integration_test_device.dart",
      "new_id": "d4e6ba2cc763b308eb7b01d74c211ce6f5b70ccd",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/test/integration_test_device.dart"
    },
    {
      "type": "modify",
      "old_id": "b9a77ed8d30ae8c885bd360a14841b7655bb7167",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/commands.shard/hermetic/test_test.dart",
      "new_id": "fd347f51c171a04db2e7740ba916e5392c5ba0a4",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/commands.shard/hermetic/test_test.dart"
    },
    {
      "type": "modify",
      "old_id": "422d1e6db82f2f8ebe53604fc275d5928790f5c0",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/integration_test_device_test.dart",
      "new_id": "86ed35649a21158bc48c69ad859c6c7e8df21fe9",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/integration_test_device_test.dart"
    }
  ]
}
