/// <summary> /// Parses the auto-response file (assumes the "/noautoresponse" switch is not specified on the command line), and combines the /// switches from the auto-response file with the switches passed in. /// Returns true if the response file was found. /// </summary> private static bool GatherAutoResponseFileSwitches(string path, CommandLineSwitches switchesFromAutoResponseFile) { string autoResponseFile = Path.Combine(path, autoResponseFileName); bool found = false; // if the auto-response file does not exist, only use the switches on the command line if (File.Exists(autoResponseFile)) { found = true; GatherResponseFileSwitch("@" + autoResponseFile, switchesFromAutoResponseFile); // if the "/noautoresponse" switch was set in the auto-response file, flag an error if (switchesFromAutoResponseFile[CommandLineSwitches.ParameterlessSwitch.NoAutoResponse]) { switchesFromAutoResponseFile.SetSwitchError("CannotAutoDisableAutoResponseFile", switchesFromAutoResponseFile.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.NoAutoResponse)); } if (switchesFromAutoResponseFile.HaveAnySwitchesBeenSet()) { // we picked up some switches from the auto-response file usingSwitchesFromAutoResponseFile = true; } } return found; }
/// <summary> /// Appends the given collection of command-line switches to this one. /// </summary> /// <remarks> /// Command-line switches have left-to-right precedence i.e. switches on the right override switches on the left. As a /// result, this "append" operation is also performed in a left-to-right manner -- the switches being appended to are /// considered to be on the "left", and the switches being appended are on the "right". /// </remarks> /// <param name="switchesToAppend"></param> internal void Append(CommandLineSwitches switchesToAppend) { // if this collection doesn't already have an error registered, but the collection being appended does if (!HaveErrors() && switchesToAppend.HaveErrors()) { // register the error from the given collection // NOTE: we always store the first error found (parsing left-to-right), and since this collection is considered to // be on the "left" of the collection being appended, the error flagged in this collection takes priority over the // error in the collection being appended _errorMessage = switchesToAppend._errorMessage; _badCommandLineArg = switchesToAppend._badCommandLineArg; _innerException = switchesToAppend._innerException; _isParameterError = switchesToAppend._isParameterError; } // NOTE: we might run into some duplicate switch errors below, but if we've already registered the error from the // collection being appended, all the duplicate switch errors will be ignored; this is fine because we really have no // way of telling which error would occur first in the left-to-right order without keeping track of a lot more error // information -- so we play it safe, and register the guaranteed error // append the parameterless switches with left-to-right precedence, flagging duplicate switches as necessary for (int i = 0; i < (int)ParameterlessSwitch.NumberOfParameterlessSwitches; i++) { if (switchesToAppend.IsParameterlessSwitchSet((ParameterlessSwitch)i)) { if (!IsParameterlessSwitchSet((ParameterlessSwitch)i) || (s_parameterlessSwitchesMap[i].duplicateSwitchErrorMessage == null)) { _parameterlessSwitches[i].commandLineArg = switchesToAppend._parameterlessSwitches[i].commandLineArg; } else { SetSwitchError(s_parameterlessSwitchesMap[i].duplicateSwitchErrorMessage, switchesToAppend.GetParameterlessSwitchCommandLineArg((ParameterlessSwitch)i)); } } } // append the parameterized switches with left-to-right precedence, flagging duplicate switches as necessary for (int j = 0; j < (int)ParameterizedSwitch.NumberOfParameterizedSwitches; j++) { if (switchesToAppend.IsParameterizedSwitchSet((ParameterizedSwitch)j)) { if (!IsParameterizedSwitchSet((ParameterizedSwitch)j) || (s_parameterizedSwitchesMap[j].duplicateSwitchErrorMessage == null)) { if (_parameterizedSwitches[j].commandLineArg == null) { _parameterizedSwitches[j].parameters = new ArrayList(); } _parameterizedSwitches[j].commandLineArg = switchesToAppend._parameterizedSwitches[j].commandLineArg; _parameterizedSwitches[j].parameters.AddRange(switchesToAppend._parameterizedSwitches[j].parameters); } else { SetSwitchError(s_parameterizedSwitchesMap[j].duplicateSwitchErrorMessage, switchesToAppend.GetParameterizedSwitchCommandLineArg((ParameterizedSwitch)j)); } } } }
public void AppendParameterlessSwitchesTests() { CommandLineSwitches switchesLeft = new CommandLineSwitches(); switchesLeft.SetParameterlessSwitch(CommandLineSwitches.ParameterlessSwitch.Help, "/?"); Assert.True(switchesLeft.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.Help)); Assert.False(switchesLeft.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger)); CommandLineSwitches switchesRight1 = new CommandLineSwitches(); switchesRight1.SetParameterlessSwitch(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger, "/noconlog"); Assert.False(switchesRight1.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.Help)); Assert.True(switchesRight1.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger)); switchesLeft.Append(switchesRight1); Assert.Equal("/noconlog", switchesLeft.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger)); Assert.True(switchesLeft.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger)); Assert.True(switchesLeft[CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger]); // this switch is not affected Assert.Equal("/?", switchesLeft.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.Help)); Assert.True(switchesLeft.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.Help)); Assert.True(switchesLeft[CommandLineSwitches.ParameterlessSwitch.Help]); CommandLineSwitches switchesRight2 = new CommandLineSwitches(); switchesRight2.SetParameterlessSwitch(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger, "/NOCONSOLELOGGER"); Assert.False(switchesRight2.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.Help)); Assert.True(switchesRight2.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger)); switchesLeft.Append(switchesRight2); Assert.Equal("/NOCONSOLELOGGER", switchesLeft.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger)); Assert.True(switchesLeft.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger)); Assert.True(switchesLeft[CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger]); Assert.Equal("/?", switchesLeft.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.Help)); Assert.True(switchesLeft.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.Help)); Assert.True(switchesLeft[CommandLineSwitches.ParameterlessSwitch.Help]); Assert.False(switchesLeft.HaveErrors()); }
public void SetParameterlessSwitchTests() { CommandLineSwitches switches = new CommandLineSwitches(); switches.SetParameterlessSwitch(CommandLineSwitches.ParameterlessSwitch.NoLogo, "/nologo"); Assert.Equal("/nologo", switches.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.NoLogo)); Assert.True(switches.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.NoLogo)); Assert.True(switches[CommandLineSwitches.ParameterlessSwitch.NoLogo]); // set it again switches.SetParameterlessSwitch(CommandLineSwitches.ParameterlessSwitch.NoLogo, "-NOLOGO"); Assert.Equal("-NOLOGO", switches.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.NoLogo)); Assert.True(switches.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.NoLogo)); Assert.True(switches[CommandLineSwitches.ParameterlessSwitch.NoLogo]); // we didn't set this switch Assert.Null(switches.GetParameterlessSwitchCommandLineArg(CommandLineSwitches.ParameterlessSwitch.Version)); Assert.False(switches.IsParameterlessSwitchSet(CommandLineSwitches.ParameterlessSwitch.Version)); Assert.False(switches[CommandLineSwitches.ParameterlessSwitch.Version]); }
internal void Append(CommandLineSwitches switchesToAppend) { if (!this.HaveErrors() && switchesToAppend.HaveErrors()) { this.errorMessage = switchesToAppend.errorMessage; this.badCommandLineArg = switchesToAppend.badCommandLineArg; this.innerException = switchesToAppend.innerException; this.isParameterError = switchesToAppend.isParameterError; } for (int i = 0; i < 0x13; i++) { if (switchesToAppend.IsParameterlessSwitchSet((ParameterlessSwitch)i)) { if (!this.IsParameterlessSwitchSet((ParameterlessSwitch)i) || (parameterlessSwitchesMap[i].duplicateSwitchErrorMessage == null)) { this.parameterlessSwitches[i].commandLineArg = switchesToAppend.parameterlessSwitches[i].commandLineArg; } else { this.SetSwitchError(parameterlessSwitchesMap[i].duplicateSwitchErrorMessage, switchesToAppend.GetParameterlessSwitchCommandLineArg((ParameterlessSwitch)i)); } } } for (int j = 0; j < 0x18; j++) { if (switchesToAppend.IsParameterizedSwitchSet((ParameterizedSwitch)j)) { if (!this.IsParameterizedSwitchSet((ParameterizedSwitch)j) || (parameterizedSwitchesMap[j].duplicateSwitchErrorMessage == null)) { if (this.parameterizedSwitches[j].commandLineArg == null) { this.parameterizedSwitches[j].parameters = new ArrayList(); } this.parameterizedSwitches[j].commandLineArg = switchesToAppend.parameterizedSwitches[j].commandLineArg; this.parameterizedSwitches[j].parameters.AddRange(switchesToAppend.parameterizedSwitches[j].parameters); } else { this.SetSwitchError(parameterizedSwitchesMap[j].duplicateSwitchErrorMessage, switchesToAppend.GetParameterizedSwitchCommandLineArg((ParameterizedSwitch)j)); } } } }
/// <summary> /// Appends the given collection of command-line switches to this one. /// </summary> /// <remarks> /// Command-line switches have left-to-right precedence i.e. switches on the right override switches on the left. As a /// result, this "append" operation is also performed in a left-to-right manner -- the switches being appended to are /// considered to be on the "left", and the switches being appended are on the "right". /// </remarks> /// <param name="switchesToAppend"></param> internal void Append(CommandLineSwitches switchesToAppend) { // if this collection doesn't already have an error registered, but the collection being appended does if (!HaveErrors() && switchesToAppend.HaveErrors()) { // register the error from the given collection // NOTE: we always store the first error found (parsing left-to-right), and since this collection is considered to // be on the "left" of the collection being appended, the error flagged in this collection takes priority over the // error in the collection being appended _errorMessage = switchesToAppend._errorMessage; _badCommandLineArg = switchesToAppend._badCommandLineArg; _innerException = switchesToAppend._innerException; _isParameterError = switchesToAppend._isParameterError; } // NOTE: we might run into some duplicate switch errors below, but if we've already registered the error from the // collection being appended, all the duplicate switch errors will be ignored; this is fine because we really have no // way of telling which error would occur first in the left-to-right order without keeping track of a lot more error // information -- so we play it safe, and register the guaranteed error // append the parameterless switches with left-to-right precedence, flagging duplicate switches as necessary for (int i = 0; i < (int)ParameterlessSwitch.NumberOfParameterlessSwitches; i++) { if (switchesToAppend.IsParameterlessSwitchSet((ParameterlessSwitch)i)) { if (!IsParameterlessSwitchSet((ParameterlessSwitch)i) || (s_parameterlessSwitchesMap[i].duplicateSwitchErrorMessage == null)) { _parameterlessSwitches[i].commandLineArg = switchesToAppend._parameterlessSwitches[i].commandLineArg; } else { SetSwitchError(s_parameterlessSwitchesMap[i].duplicateSwitchErrorMessage, switchesToAppend.GetParameterlessSwitchCommandLineArg((ParameterlessSwitch)i)); } } } // append the parameterized switches with left-to-right precedence, flagging duplicate switches as necessary for (int j = 0; j < (int)ParameterizedSwitch.NumberOfParameterizedSwitches; j++) { if (switchesToAppend.IsParameterizedSwitchSet((ParameterizedSwitch)j)) { if (!IsParameterizedSwitchSet((ParameterizedSwitch)j) || (s_parameterizedSwitchesMap[j].duplicateSwitchErrorMessage == null)) { if (_parameterizedSwitches[j].commandLineArg == null) { _parameterizedSwitches[j].parameters = new ArrayList(); } _parameterizedSwitches[j].commandLineArg = switchesToAppend._parameterizedSwitches[j].commandLineArg; _parameterizedSwitches[j].parameters.AddRange(switchesToAppend._parameterizedSwitches[j].parameters); } else { SetSwitchError(s_parameterizedSwitchesMap[j].duplicateSwitchErrorMessage, switchesToAppend.GetParameterizedSwitchCommandLineArg((ParameterizedSwitch)j)); } } } }