Index: components/policy/android/javatests/src/org/chromium/policy/test/PolicyData.java |
diff --git a/components/policy/android/javatests/src/org/chromium/policy/test/PolicyData.java b/components/policy/android/javatests/src/org/chromium/policy/test/PolicyData.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6b230d86392a7b6bc2a81cbfea9b4ed66e23b313 |
--- /dev/null |
+++ b/components/policy/android/javatests/src/org/chromium/policy/test/PolicyData.java |
@@ -0,0 +1,119 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.policy.test; |
+ |
+import android.os.Bundle; |
+ |
+import junit.framework.Assert; |
+ |
+import org.chromium.base.Log; |
+import org.json.JSONArray; |
+ |
+/** |
+ * Helper class to transform Java types to {@link Bundle}s usable by the Policy system. |
+ * |
+ * Use the subclasses to define the data and then transform it using {@link #asBundle(Iterable)} |
+ */ |
+public abstract class PolicyData { |
+ private static final String TAG = "policy_test"; |
+ private final String mKey; |
+ |
+ public PolicyData(String key) { |
+ mKey = key; |
+ } |
+ |
+ public String getKey() { |
+ return mKey; |
+ } |
+ |
+ public abstract void putInBundle(Bundle bundle); |
+ |
+ public static Bundle asBundle(Iterable<PolicyData> policies) { |
+ Bundle bundle = new Bundle(); |
+ for (PolicyData data : policies) { |
+ Log.d(TAG, "Adding to policy bundle: %s", data); |
+ data.putInBundle(bundle); |
+ } |
+ return bundle; |
+ } |
+ |
+ /** {@link PolicyData} for the {@link String} type. */ |
+ public static class Str extends PolicyData { |
+ private final String mValue; |
+ |
+ public Str(String key, String value) { |
+ super(key); |
+ mValue = value; |
+ } |
+ |
+ public String getValue() { |
+ return mValue; |
+ } |
+ |
+ @Override |
+ public void putInBundle(Bundle bundle) { |
+ bundle.putString(getKey(), mValue); |
+ } |
+ |
+ @Override |
+ public String toString() { |
+ return String.format("PolicyData.Str{%s=%s}", getKey(), mValue); |
+ } |
+ } |
+ |
+ /** {@link PolicyData} with no value, for error states. Doesn't put anything in a bundle.*/ |
+ public static class Undefined extends PolicyData { |
+ public Undefined(String key) { |
+ super(key); |
+ } |
+ |
+ @Override |
+ public void putInBundle(Bundle bundle) { |
+ Assert.fail(String.format( |
+ "Attempted to push the '%s' policy without value to a bundle.", getKey())); |
+ } |
+ |
+ @Override |
+ public String toString() { |
+ return String.format("PolicyData.Undefined{%s}", getKey()); |
+ } |
+ } |
+ |
+ /** |
+ * {@link PolicyData} for the {@link String} array type. |
+ * Outputs a string encoded as a JSON array. |
+ */ |
+ public static class StrArray extends PolicyData { |
+ private final String[] mValue; |
+ |
+ public StrArray(String key, String[] value) { |
+ super(key); |
+ mValue = value.clone(); |
+ } |
+ |
+ public String[] getValue() { |
+ return mValue.clone(); |
+ } |
+ |
+ private String valueToString() { |
+ // JSONArray(Object[]) requires API 19 |
+ JSONArray array = new JSONArray(); |
+ for (String s : mValue) { |
+ array.put(s); |
+ } |
+ return array.toString(); |
+ } |
+ |
+ @Override |
+ public void putInBundle(Bundle bundle) { |
+ bundle.putString(getKey(), valueToString()); |
+ } |
+ |
+ @Override |
+ public String toString() { |
+ return String.format("PolicyData.StrArray{%s=%s}", getKey(), valueToString()); |
+ } |
+ } |
+} |