package com.bugsnag.android;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class MetaDataTest extends BugsnagTestCase {
public void testBasicSerialization() throws JSONException, IOException {
MetaData metaData = new MetaData();
metaData.addToTab("example", "string", "value");
metaData.addToTab("example", "integer", 123);
metaData.addToTab("example", "double", 123.45);
metaData.addToTab("example", "boolean", true);
metaData.addToTab("example", "null", null);
metaData.addToTab("example", "array", new String[]{"a", "b"});
metaData.addToTab("example", "collection", Arrays.asList("Hello", "World"));
Map<String, String> map = new HashMap<String, String>();
map.put("key", "value");
metaData.addToTab("example", "map", map);
JSONObject metaDataJson = streamableToJson(metaData);
assertTrue(metaDataJson.has("example"));
JSONObject tab = metaDataJson.getJSONObject("example");
assertEquals("value", tab.getString("string"));
assertEquals(123, tab.getInt("integer"));
assertEquals(123.45, tab.getDouble("double"));
assertEquals(true, tab.getBoolean("boolean"));
assertTrue(tab.isNull("null"));
JSONArray array = tab.getJSONArray("array");
assertEquals(2, array.length());
assertEquals("a", array.get(0));
assertEquals("b", array.get(1));
JSONArray collection = tab.getJSONArray("collection");
assertEquals(2, collection.length());
assertEquals("Hello", collection.get(0));
assertEquals("World", collection.get(1));
JSONObject mapJson = tab.getJSONObject("map");
assertEquals("value", mapJson.getString("key"));
}
public void testNestedMapSerialization() throws JSONException, IOException {
Map<String, String> childMap = new HashMap<String, String>();
childMap.put("key", "value");
Map<String, Object> map = new HashMap<String, Object>();
map.put("key", childMap);
MetaData metaData = new MetaData();
metaData.addToTab("example", "map", map);
JSONObject metaDataJson = streamableToJson(metaData);
assertTrue(metaDataJson.has("example"));
JSONObject childMapJson = metaDataJson.getJSONObject("example").getJSONObject("map").getJSONObject("key");
assertEquals("value", childMapJson.getString("key"));
}
public void testNestedCollectionSerialization() throws JSONException, IOException {
Collection childList = new LinkedList<String>();
childList.add("james");
childList.add("test");
Collection list = new LinkedList();
list.add(childList);
MetaData metaData = new MetaData();
metaData.addToTab("example", "list", list);
JSONObject metaDataJson = streamableToJson(metaData);
assertTrue(metaDataJson.has("example"));
JSONArray childListJson = metaDataJson.getJSONObject("example").getJSONArray("list").getJSONArray(0);
assertEquals(2, childListJson.length());
assertEquals("james", childListJson.get(0));
assertEquals("test", childListJson.get(1));
}
public void testBasicMerge() {
MetaData base = new MetaData();
base.addToTab("example", "name", "bob");
base.addToTab("example", "awesome", false);
MetaData overrides = new MetaData();
base.addToTab("example", "age", 30);
base.addToTab("example", "awesome", true);
MetaData merged = MetaData.merge(base, overrides);
Map<String, Object> tab = merged.getTab("example");
assertEquals("bob", tab.get("name"));
assertEquals(30, tab.get("age"));
assertEquals(true, tab.get("awesome"));
}
public void testNullMerge() {
MetaData base = new MetaData();
base.addToTab("example", "name", "bob");
MetaData merged = MetaData.merge(base, null);
Map<String, Object> tab = merged.getTab("example");
assertEquals("bob", tab.get("name"));
merged = MetaData.merge(null, base);
tab = merged.getTab("example");
assertEquals("bob", tab.get("name"));
}
public void testDeepMerge() {
Map<String, String> baseMap = new HashMap<String, String>();
baseMap.put("key", "fromBase");
MetaData base = new MetaData();
base.addToTab("example", "map", baseMap);
Map<String, String> overridesMap = new HashMap<String, String>();
baseMap.put("key", "fromOverrides");
MetaData overrides = new MetaData();
overrides.addToTab("example", "map", overridesMap);
MetaData merged = MetaData.merge(base, overrides);
Map<String, Object> tab = merged.getTab("example");
Map<String, String> mergedMap = (Map<String, String>)tab.get("map");
assertEquals("fromOverrides", mergedMap.get("key"));
}
public void testBasicFiltering() throws JSONException, IOException {
MetaData metaData = new MetaData();
metaData.setFilters("password");
metaData.addToTab("example", "password", "p4ssw0rd");
metaData.addToTab("example", "confirm_password", "p4ssw0rd");
metaData.addToTab("example", "normal", "safe");
JSONObject metaDataJson = streamableToJson(metaData);
assertTrue(metaDataJson.has("example"));
JSONObject tabJson = metaDataJson.getJSONObject("example");
assertEquals("[FILTERED]", tabJson.getString("password"));
assertEquals("[FILTERED]", tabJson.getString("confirm_password"));
assertEquals("safe", tabJson.getString("normal"));
}
public void testNestedFiltering() throws JSONException, IOException {
Map<String, String> sensitiveMap = new HashMap<String, String>();
sensitiveMap.put("password", "p4ssw0rd");
sensitiveMap.put("confirm_password", "p4ssw0rd");
sensitiveMap.put("normal", "safe");
MetaData metaData = new MetaData();
metaData.setFilters("password");
metaData.addToTab("example", "sensitiveMap", sensitiveMap);
JSONObject metaDataJson = streamableToJson(metaData);
assertTrue(metaDataJson.has("example"));
JSONObject tabJson = metaDataJson.getJSONObject("example");
JSONObject sensitiveMapJson = tabJson.getJSONObject("sensitiveMap");
assertEquals("[FILTERED]", sensitiveMapJson.getString("password"));
assertEquals("[FILTERED]", sensitiveMapJson.getString("confirm_password"));
assertEquals("safe", sensitiveMapJson.getString("normal"));
}
}