On device GTest working directory

Before executing an on device GTest, change working directory to that
of the gtest binary. This makes sure that tests that reference data
using a relative file path will be able to find it.

Bug: 256658467
Test: TreeHugger
Change-Id: I3f0c0dc0bc63aa4726baaeeac53b8016f4209d31
diff --git a/javatests/com/android/tradefed/testtype/GTestTest.java b/javatests/com/android/tradefed/testtype/GTestTest.java
index 37bc6f3..cf4e74c 100644
--- a/javatests/com/android/tradefed/testtype/GTestTest.java
+++ b/javatests/com/android/tradefed/testtype/GTestTest.java
@@ -195,7 +195,7 @@
 
         verify(mMockITestDevice)
                 .executeShellCommand(
-                        Mockito.contains(test2),
+                        Mockito.argThat(s -> s.contains("arm64") && s.contains("test2")),
                         Mockito.same(mMockReceiver),
                         Mockito.anyLong(),
                         (TimeUnit) Mockito.any(),
@@ -228,7 +228,7 @@
 
         verify(mMockITestDevice)
                 .executeShellCommand(
-                        Mockito.contains(modulePath),
+                        Mockito.argThat(s -> s.contains(nativeTestPath) && s.contains(module)),
                         Mockito.same(mMockReceiver),
                         Mockito.anyLong(),
                         (TimeUnit) Mockito.any(),
@@ -265,7 +265,11 @@
 
         verify(mMockITestDevice)
                 .executeShellCommand(
-                        Mockito.contains(test1Path),
+                        Mockito.argThat(
+                                s ->
+                                        s.contains(nativeTestPath)
+                                                && s.contains(subFolderName)
+                                                && s.contains(test1)),
                         Mockito.same(mMockReceiver),
                         Mockito.anyLong(),
                         (TimeUnit) Mockito.any(),
diff --git a/test_framework/com/android/tradefed/testtype/GTest.java b/test_framework/com/android/tradefed/testtype/GTest.java
index eeb4905..b5b045a 100644
--- a/test_framework/com/android/tradefed/testtype/GTest.java
+++ b/test_framework/com/android/tradefed/testtype/GTest.java
@@ -452,4 +452,15 @@
     public boolean isRebootBeforeTestEnabled() {
         return mRebootBeforeTest;
     }
+
+    @Override
+    protected String getGTestCmdLineWrapper(String fullPath, String flags) {
+        File f = new File(fullPath);
+        String dir = f.getParent();
+        if (dir != null) {
+            String file = f.getName();
+            return String.format("cd %s; ./%s %s", dir, file, flags);
+        }
+        return String.format("%s %s", fullPath, flags);
+    }
 }