CtsMediaBitstreamsTestCases: support cli arg passing

To pass a command line argument:
cts-tradefed run cts -m CtsMediaBitstreamsTestCases --module-arg \
  CtsMediaBitstreamsTestCases:set-option:<arg_name>:<arg_value>

For example:
arg_name can be "host-bitstreams-path",
and arg_value can be "./TestVectorsIttiam"

Also fixed typos: s,bitsteam,bitstream,

Bug: 30268664
Test: cts-tradefed run cts -m CtsMediaBitstreamsTestCases --module-arg \
  CtsMediaBitstreamsTestCases:set-option:host-bitstreams-path:./TestVectorsIttiam

Change-Id: Iee82a432e3b247817fc9ec82b8acb78006b6ee91
diff --git a/hostsidetests/media/bitstreams/app/src/android/media/cts/bitstreams/app/MediaBitstreamsDeviceSideTest.java b/hostsidetests/media/bitstreams/app/src/android/media/cts/bitstreams/app/MediaBitstreamsDeviceSideTest.java
index 32fc86b..af0ae8d 100644
--- a/hostsidetests/media/bitstreams/app/src/android/media/cts/bitstreams/app/MediaBitstreamsDeviceSideTest.java
+++ b/hostsidetests/media/bitstreams/app/src/android/media/cts/bitstreams/app/MediaBitstreamsDeviceSideTest.java
@@ -68,7 +68,7 @@
 
     private static File mAppCache = InstrumentationRegistry.getContext().getExternalCacheDir();
     private static String mDeviceBitstreamsPath = InstrumentationRegistry.getArguments().getString(
-            MediaBitstreams.OPT_DEVICE_BITSTEAMS_PATH,
+            MediaBitstreams.OPT_DEVICE_BITSTREAMS_PATH,
             MediaBitstreams.DEFAULT_DEVICE_BITSTEAMS_PATH);
 
     @BeforeClass
diff --git a/hostsidetests/media/bitstreams/common/src/android/media/cts/bitstreams/MediaBitstreams.java b/hostsidetests/media/bitstreams/common/src/android/media/cts/bitstreams/MediaBitstreams.java
index b4ab76c..99c4387 100644
--- a/hostsidetests/media/bitstreams/common/src/android/media/cts/bitstreams/MediaBitstreams.java
+++ b/hostsidetests/media/bitstreams/common/src/android/media/cts/bitstreams/MediaBitstreams.java
@@ -23,8 +23,8 @@
 public class MediaBitstreams {
 
     /* options */
-    public static final String OPT_HOST_BITSTEAMS_PATH = "host-bitsteams-path";
-    public static final String OPT_DEVICE_BITSTEAMS_PATH = "device-bitsteams-path";
+    public static final String OPT_HOST_BITSTREAMS_PATH = "host-bitstreams-path";
+    public static final String OPT_DEVICE_BITSTREAMS_PATH = "device-bitstreams-path";
     public static final String OPT_DOWNLOAD_BITSTREAMS = "download-bitstreams";
     public static final String OPT_DEBUG_TARGET_DEVICE = "debug-target-device";
     public static final String OPT_BITSTREAMS_TO_TEST_TXT = "bitstreams-to-test-txt";
diff --git a/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4ClassRunnerWithParameters.java b/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4ClassRunnerWithParameters.java
index 4b4a2a7..1c300fe 100644
--- a/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4ClassRunnerWithParameters.java
+++ b/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4ClassRunnerWithParameters.java
@@ -16,14 +16,18 @@
 package android.media.cts.bitstreams;
 
 import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.config.Option;
 import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.testtype.HostTest;
 import com.android.tradefed.testtype.IAbi;
 import com.android.tradefed.testtype.IAbiReceiver;
 import com.android.tradefed.testtype.IBuildReceiver;
 import com.android.tradefed.testtype.IDeviceTest;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 import org.junit.runner.Description;
 import org.junit.runner.Runner;
 import org.junit.runners.model.FrameworkMethod;
@@ -39,6 +43,12 @@
 public class DeviceJUnit4ClassRunnerWithParameters extends BlockJUnit4ClassRunnerWithParameters
         implements IDeviceTest, IBuildReceiver, IAbiReceiver {
 
+    @Option(
+        name = HostTest.SET_OPTION_NAME,
+        description = HostTest.SET_OPTION_DESC
+    )
+    private Set<String> mKeyValueOptions = new HashSet<>();
+
     private ITestDevice mDevice;
     private IBuildInfo mBuildInfo;
     private IAbi mAbi;
@@ -112,6 +122,7 @@
         if (testObj instanceof IAbiReceiver) {
             ((IAbiReceiver) testObj).setAbi(mAbi);
         }
+        HostTest.setOptionToLoadedObject(testObj, new ArrayList<String>(mKeyValueOptions));
         return testObj;
     }
 
diff --git a/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4Parameterized.java b/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4Parameterized.java
index 5c0b7bc..e37b891 100644
--- a/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4Parameterized.java
+++ b/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/DeviceJUnit4Parameterized.java
@@ -16,13 +16,23 @@
 package android.media.cts.bitstreams;
 
 import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.config.ConfigurationException;
+import com.android.tradefed.config.Option;
+import com.android.tradefed.config.OptionSetter;
 import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.testtype.HostTest;
 import com.android.tradefed.testtype.IAbi;
 import com.android.tradefed.testtype.IAbiReceiver;
 import com.android.tradefed.testtype.IBuildReceiver;
 import com.android.tradefed.testtype.IDeviceTest;
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import org.junit.runner.Description;
 import org.junit.runner.Runner;
+import org.junit.runner.notification.RunNotifier;
 import org.junit.runners.Parameterized;
 
 /**
@@ -31,6 +41,12 @@
 public class DeviceJUnit4Parameterized extends Parameterized
         implements IDeviceTest, IBuildReceiver, IAbiReceiver {
 
+    @Option(
+        name = HostTest.SET_OPTION_NAME,
+        description = HostTest.SET_OPTION_DESC
+    )
+    private Set<String> mKeyValueOptions = new HashSet<>();
+
     private ITestDevice mDevice;
     private List<Runner> mRunners;
 
@@ -77,4 +93,18 @@
     protected List<Runner> getChildren() {
         return mRunners;
     }
+
+    @Override
+    protected void runChild(Runner runner, RunNotifier notifier) {
+        try {
+            OptionSetter setter = new OptionSetter(runner);
+            for (String kv : mKeyValueOptions) {
+                setter.setOptionValue(HostTest.SET_OPTION_NAME, kv);
+            }
+        } catch (ConfigurationException e) {
+            CLog.w(e);
+        }
+        super.runChild(runner, notifier);
+    }
+
 }
diff --git a/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/MediaBitstreamsTest.java b/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/MediaBitstreamsTest.java
index 0da0193..2c61859 100644
--- a/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/MediaBitstreamsTest.java
+++ b/hostsidetests/media/bitstreams/src/android/media/cts/bitstreams/MediaBitstreamsTest.java
@@ -65,12 +65,12 @@
 @UseParametersRunnerFactory(DeviceJUnit4ClassRunnerWithParameters.RunnerFactory.class)
 public class MediaBitstreamsTest implements IDeviceTest, IBuildReceiver, IAbiReceiver {
 
-    @Option(name = MediaBitstreams.OPT_HOST_BITSTEAMS_PATH,
+    @Option(name = MediaBitstreams.OPT_HOST_BITSTREAMS_PATH,
             description = "Absolute path of Ittiam bitstreams (host)",
             mandatory = true)
     private File mHostBitstreamsPath = new File(MediaBitstreams.DEFAULT_HOST_BITSTREAMS_PATH);
 
-    @Option(name = MediaBitstreams.OPT_DEVICE_BITSTEAMS_PATH,
+    @Option(name = MediaBitstreams.OPT_DEVICE_BITSTREAMS_PATH,
             description = "Absolute path of Ittiam bitstreams (device)")
     private String mDeviceBitstreamsPath = MediaBitstreams.DEFAULT_DEVICE_BITSTEAMS_PATH;
 
@@ -195,7 +195,7 @@
     Map<String, String> getArgs() {
         Map<String, String> args = new HashMap<>();
         args.put(MediaBitstreams.OPT_DEBUG_TARGET_DEVICE, Boolean.toString(mDebugTargetDevice));
-        args.put(MediaBitstreams.OPT_DEVICE_BITSTEAMS_PATH, mDeviceBitstreamsPath);
+        args.put(MediaBitstreams.OPT_DEVICE_BITSTREAMS_PATH, mDeviceBitstreamsPath);
         return args;
     }