зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1270191 - Add IntentUtils.getEnvVarMap. r=grisha
MozReview-Commit-ID: 7ojczu4rOnD --HG-- extra : rebase_source : f33965372fdfdb801d5f9b999c91dd591f6c856c
This commit is contained in:
Родитель
9939c69b11
Коммит
b50b3795da
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, you can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.mozilla.gecko.util;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilities for Intents.
|
||||||
|
*/
|
||||||
|
public class IntentUtils {
|
||||||
|
private static final String ENV_VAR_REGEX = "(.+)=(.*)";
|
||||||
|
|
||||||
|
private IntentUtils() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of environment variables and their values. These are parsed from an Intent extra
|
||||||
|
* with the key -> value format:
|
||||||
|
* env# -> ENV_VAR=VALUE
|
||||||
|
*
|
||||||
|
* # in env# is expected to be increasing from 0.
|
||||||
|
*
|
||||||
|
* @return A Map of environment variable name to value, e.g. ENV_VAR -> VALUE
|
||||||
|
*/
|
||||||
|
public static HashMap<String, String> getEnvVarMap(@NonNull final Intent intent) {
|
||||||
|
final HashMap<String, String> out = new HashMap<>();
|
||||||
|
final Pattern envVarPattern = Pattern.compile(ENV_VAR_REGEX);
|
||||||
|
Matcher matcher = null;
|
||||||
|
|
||||||
|
String envValue = intent.getStringExtra("env0");
|
||||||
|
int i = 1;
|
||||||
|
while (envValue != null) {
|
||||||
|
// Optimization to re-use matcher rather than creating new
|
||||||
|
// objects because this is used in the startup path.
|
||||||
|
if (matcher == null) {
|
||||||
|
matcher = envVarPattern.matcher(envValue);
|
||||||
|
} else {
|
||||||
|
matcher.reset(envValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matcher.matches()) {
|
||||||
|
final String envVarName = matcher.group(1);
|
||||||
|
final String envVarValue = matcher.group(2);
|
||||||
|
out.put(envVarName, envVarValue);
|
||||||
|
}
|
||||||
|
envValue = intent.getStringExtra("env" + i);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
|
@ -116,6 +116,7 @@ gujar.sources += ['java/org/mozilla/gecko/' + x for x in [
|
||||||
'util/INIParser.java',
|
'util/INIParser.java',
|
||||||
'util/INISection.java',
|
'util/INISection.java',
|
||||||
'util/InputOptionsUtils.java',
|
'util/InputOptionsUtils.java',
|
||||||
|
'util/IntentUtils.java',
|
||||||
'util/IOUtils.java',
|
'util/IOUtils.java',
|
||||||
'util/JSONUtils.java',
|
'util/JSONUtils.java',
|
||||||
'util/MenuUtils.java',
|
'util/MenuUtils.java',
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, you can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.mozilla.gecko.util;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mozilla.gecko.background.testhelpers.TestRunner;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for the Intent utilities.
|
||||||
|
*/
|
||||||
|
@RunWith(TestRunner.class)
|
||||||
|
public class TestIntentUtils {
|
||||||
|
|
||||||
|
private static final Map<String, String> TEST_ENV_VAR_MAP;
|
||||||
|
static {
|
||||||
|
final HashMap<String, String> tempMap = new HashMap<>();
|
||||||
|
tempMap.put("ZERO", "0");
|
||||||
|
tempMap.put("ONE", "1");
|
||||||
|
tempMap.put("STRING", "TEXT");
|
||||||
|
tempMap.put("L_WHITESPACE", " LEFT");
|
||||||
|
tempMap.put("R_WHITESPACE", "RIGHT ");
|
||||||
|
tempMap.put("ALL_WHITESPACE", " ALL ");
|
||||||
|
tempMap.put("WHITESPACE_IN_VALUE", "IN THE MIDDLE");
|
||||||
|
tempMap.put("WHITESPACE IN KEY", "IS_PROBABLY_NOT_VALID_ANYWAY");
|
||||||
|
tempMap.put("BLANK_VAL", "");
|
||||||
|
TEST_ENV_VAR_MAP = Collections.unmodifiableMap(tempMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Intent testIntent;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
testIntent = getIntentWithTestData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Intent getIntentWithTestData() {
|
||||||
|
final Intent out = new Intent(Intent.ACTION_VIEW);
|
||||||
|
int i = 0;
|
||||||
|
for (final String key : TEST_ENV_VAR_MAP.keySet()) {
|
||||||
|
final String value = key + "=" + TEST_ENV_VAR_MAP.get(key);
|
||||||
|
out.putExtra("env" + i, value);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetEnvVarMap() throws Exception {
|
||||||
|
final HashMap<String, String> actual = IntentUtils.getEnvVarMap(testIntent);
|
||||||
|
for (final String actualEnvVarName : actual.keySet()) {
|
||||||
|
assertTrue("Actual key exists in test data: " + actualEnvVarName,
|
||||||
|
TEST_ENV_VAR_MAP.containsKey(actualEnvVarName));
|
||||||
|
|
||||||
|
final String expectedValue = TEST_ENV_VAR_MAP.get(actualEnvVarName);
|
||||||
|
final String actualValue = actual.get(actualEnvVarName);
|
||||||
|
assertEquals("Actual env var value matches test data", expectedValue, actualValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче