env) {
mErrors = errors;
mArgs = args;
+ mEnv = env;
}
public Options parse() {
+ // Args
try {
while (mIndex < mArgs.length) {
final String arg = mArgs[mIndex];
- if ("--hide".equals(arg)) {
+ if ("--ckati_bin".equals(arg)) {
+ mResult.mCKatiBin = requireNextStringArg(arg);
+ } else if ("--hide".equals(arg)) {
handleErrorCode(arg, Errors.Level.HIDDEN);
} else if ("--error".equals(arg)) {
handleErrorCode(arg, Errors.Level.ERROR);
@@ -99,11 +137,45 @@ public class Options {
mErrors.ERROR_COMMAND_LINE.add(ex.getMessage());
}
+ // Environment
+ mResult.mProduct = mEnv.get("TARGET_PRODUCT");
+ mResult.mVariant = mEnv.get("TARGET_BUILD_VARIANT");
+ mResult.mOutDir = mEnv.get("OUT_DIR");
+
+ validateArgs();
+
return mResult;
}
- private void addWarning(Errors.Category category, String message) {
- category.add(message);
+ /**
+ * For testing; don't generate errors about missing arguments
+ */
+ public void setSkipRequiredArgValidation() {
+ mSkipRequiredArgValidation = true;
+ }
+
+ private void validateArgs() {
+ if (!mSkipRequiredArgValidation) {
+ if (mResult.mCKatiBin == null || "".equals(mResult.mCKatiBin)) {
+ addMissingArgError("--ckati_bin");
+ }
+ if (mResult.mProduct == null) {
+ addMissingEnvError("TARGET_PRODUCT");
+ }
+ if (mResult.mVariant == null) {
+ addMissingEnvError("TARGET_BUILD_VARIANT");
+ }
+ }
+ }
+
+ private void addMissingArgError(String argName) {
+ mErrors.ERROR_COMMAND_LINE.add("Required command line argument missing: "
+ + argName);
+ }
+
+ private void addMissingEnvError(String envName) {
+ mErrors.ERROR_COMMAND_LINE.add("Required environment variable missing: "
+ + envName);
}
private String getNextNonFlagArg() {
@@ -117,6 +189,14 @@ public class Options {
return mArgs[mIndex];
}
+ private String requireNextStringArg(String arg) throws ParseException {
+ final String val = getNextNonFlagArg();
+ if (val == null) {
+ throw new ParseException(arg + " requires a string argument.");
+ }
+ return val;
+ }
+
private int requireNextNumberArg(String arg) throws ParseException {
final String val = getNextNonFlagArg();
if (val == null) {
@@ -151,7 +231,7 @@ public class Options {
*
* Adds errors encountered to Errors object.
*/
- public static Options parse(Errors errors, String[] args) {
- return (new Parser(errors, args)).parse();
+ public static Options parse(Errors errors, String[] args, Map env) {
+ return (new Parser(errors, args, env)).parse();
}
}
diff --git a/tools/product_config/test/com/android/build/config/OptionsTest.java b/tools/product_config/test/com/android/build/config/OptionsTest.java
index 2c36322584..459efa53b0 100644
--- a/tools/product_config/test/com/android/build/config/OptionsTest.java
+++ b/tools/product_config/test/com/android/build/config/OptionsTest.java
@@ -19,12 +19,24 @@ package com.android.build.config;
import org.junit.Assert;
import org.junit.Test;
+import java.util.HashMap;
+
public class OptionsTest {
+
+ private Options parse(Errors errors, String[] args) {
+ final HashMap env = new HashMap();
+ env.put("TARGET_PRODUCT", "test_product");
+ env.put("TARGET_BUILD_VARIANT", "user");
+ final Options.Parser parser = new Options.Parser(errors, args, env);
+ parser.setSkipRequiredArgValidation();
+ return parser.parse();
+ }
+
@Test
public void testErrorMissingLast() {
final Errors errors = new Errors();
- final Options options = Options.parse(errors, new String[] {
+ final Options options = parse(errors, new String[] {
"--error"
});
@@ -37,7 +49,7 @@ public class OptionsTest {
public void testErrorMissingNotLast() {
final Errors errors = new Errors();
- final Options options = Options.parse(errors, new String[] {
+ final Options options = parse(errors, new String[] {
"--error", "--warning", "2"
});
@@ -50,7 +62,7 @@ public class OptionsTest {
public void testErrorNotNumeric() {
final Errors errors = new Errors();
- final Options options = Options.parse(errors, new String[] {
+ final Options options = parse(errors, new String[] {
"--error", "notgood"
});
@@ -63,7 +75,7 @@ public class OptionsTest {
public void testErrorInvalidError() {
final Errors errors = new Errors();
- final Options options = Options.parse(errors, new String[] {
+ final Options options = parse(errors, new String[] {
"--error", "50000"
});
@@ -76,7 +88,7 @@ public class OptionsTest {
public void testErrorOne() {
final Errors errors = new Errors();
- final Options options = Options.parse(errors, new String[] {
+ final Options options = parse(errors, new String[] {
"--error", "2"
});
@@ -89,7 +101,7 @@ public class OptionsTest {
public void testWarningOne() {
final Errors errors = new Errors();
- final Options options = Options.parse(errors, new String[] {
+ final Options options = parse(errors, new String[] {
"--warning", "2"
});
@@ -102,7 +114,7 @@ public class OptionsTest {
public void testHideOne() {
final Errors errors = new Errors();
- final Options options = Options.parse(errors, new String[] {
+ final Options options = parse(errors, new String[] {
"--hide", "2"
});
@@ -110,5 +122,16 @@ public class OptionsTest {
Assert.assertEquals(Options.Action.DEFAULT, options.getAction());
Assert.assertFalse(errors.hadWarningOrError());
}
+
+ @Test
+ public void testEnv() {
+ final Errors errors = new Errors();
+
+ final Options options = parse(errors, new String[0]);
+
+ Assert.assertEquals("test_product", options.getProduct());
+ Assert.assertEquals("user", options.getVariant());
+ Assert.assertFalse(errors.hadWarningOrError());
+ }
}