From b7d624662bd0fd4a3ff2d08005ceac3b8f5fe83f Mon Sep 17 00:00:00 2001 From: PJ Date: Thu, 11 Jun 2026 09:29:16 +0530 Subject: [PATCH] fix(sidecar): default reinstallApp in SetClearStateReinstall; cover non-android clear Only Dial set reinstallApp, so a Client built another way would nil-deref on Android clear-state. Default it in SetClearStateReinstall too. Add a non-android test so the platform guard has negative coverage: dropping the android check would now fail. --- internal/driver/sidecar/client.go | 3 +++ internal/driver/sidecar/client_test.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/internal/driver/sidecar/client.go b/internal/driver/sidecar/client.go index 04583d3..0214b29 100644 --- a/internal/driver/sidecar/client.go +++ b/internal/driver/sidecar/client.go @@ -46,6 +46,9 @@ func (c *Client) SetClearStateReinstall(serial, apkPath string, output io.Writer c.serial = serial c.apkPath = apkPath c.output = output + if c.reinstallApp == nil { + c.reinstallApp = android.ReinstallApp + } } // ForegroundApp reports the foreground package. Only Android is supported (via diff --git a/internal/driver/sidecar/client_test.go b/internal/driver/sidecar/client_test.go index 9dd6715..2cee6c6 100644 --- a/internal/driver/sidecar/client_test.go +++ b/internal/driver/sidecar/client_test.go @@ -372,6 +372,25 @@ func TestClient_LaunchClearStateWithoutApkPathUsesSidecarClear(t *testing.T) { } } +func TestClient_LaunchClearStateNonAndroidUsesSidecarClear(t *testing.T) { + state := newHarness(t) + client, _ := Dial(state.address) + defer client.Close() + client.SetPlatform("ios") + client.SetClearStateReinstall("", "/tmp/app.app", io.Discard) + client.reinstallApp = func(_ context.Context, _, _, _ string, _ io.Writer) error { + t.Fatal("reinstall must not run on a non-android platform") + return nil + } + + if err := client.Launch(context.Background(), "app.folio", true, nil); err != nil { + t.Fatal(err) + } + if !state.fake.clearState { + t.Error("non-android clear-state must forward clearState to the sidecar") + } +} + func TestClient_TapAndTapSelector(t *testing.T) { state := newHarness(t) client, _ := Dial(state.address)