blob: 60ab5163f88370b2669747200c4227f247405531 [file] [log] [blame]
// Copyright 2008-2009 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
#include "omaha/goopdate/command_line_validator.h"
#include "omaha/goopdate/command_line_parser.h"
#include "omaha/testing/unit_test.h"
namespace omaha {
const TCHAR* kScenario1Name = _T("core");
const TCHAR* kScenario2Name = _T("SomeScenario");
const TCHAR* kScenario3Name = _T("OtherMechanism");
const TCHAR* kScenario1CmdLine = _T("program.exe /lang foo");
const TCHAR* kScenario2CmdLine = _T("program.exe /install x y /service");
const TCHAR* kScenario3CmdLine = _T("prog.exe /install x y /service /lang en");
const TCHAR* kLangSwitch = _T("lang");
const int kLangSwitchArgCount = 1;
const TCHAR* kInstallSwitch = _T("install");
const int kInstallSwitchArgCount = 2;
const TCHAR* kServiceSwitch = _T("service");
const int kServiceSwitchArgCount = 0;
class CommandLineValidatorTest : public testing::Test {
public:
protected:
CommandLineValidatorTest() {
}
virtual void SetUp() {
scenario_match_name_.Empty();
// This validator only has one scenario.
validator1_.Clear();
// "program.exe /lang foo"
validator1_.CreateScenario(kScenario1Name);
validator1_.AddScenarioParameter(kScenario1Name,
kLangSwitch,
kLangSwitchArgCount);
// This validator has three scenarios.
validator2_.Clear();
// "program.exe /lang foo"
validator2_.CreateScenario(kScenario1Name);
validator2_.AddScenarioParameter(kScenario1Name,
kLangSwitch,
kLangSwitchArgCount);
// "program.exe /install x y /service"
validator2_.CreateScenario(kScenario2Name);
validator2_.AddScenarioParameter(kScenario2Name,
kInstallSwitch,
kInstallSwitchArgCount);
validator2_.AddScenarioParameter(kScenario2Name,
kServiceSwitch,
kServiceSwitchArgCount);
// "program.exe /install x y /service /lang en"
validator2_.CreateScenario(kScenario3Name);
validator2_.AddScenarioParameter(kScenario3Name,
kInstallSwitch,
kInstallSwitchArgCount);
validator2_.AddScenarioParameter(kScenario3Name,
kServiceSwitch,
kServiceSwitchArgCount);
validator2_.AddScenarioParameter(kScenario3Name,
kLangSwitch,
kLangSwitchArgCount);
}
virtual void TearDown() {
}
CommandLineValidator validator1_;
CommandLineValidator validator2_;
CommandLineParser parser_;
CString scenario_match_name_;
};
TEST_F(CommandLineValidatorTest, BasicScenarioPass) {
EXPECT_SUCCEEDED(parser_.ParseFromString(kScenario1CmdLine));
EXPECT_SUCCEEDED(validator1_.Validate(parser_, &scenario_match_name_));
EXPECT_STREQ(kScenario1Name, scenario_match_name_);
}
TEST_F(CommandLineValidatorTest, BasicScenarioFail) {
EXPECT_SUCCEEDED(parser_.ParseFromString(_T("goopdate.exe /something bad")));
EXPECT_FAILED(validator1_.Validate(parser_, &scenario_match_name_));
}
TEST_F(CommandLineValidatorTest, Scenario1PassMulti) {
EXPECT_SUCCEEDED(parser_.ParseFromString(kScenario1CmdLine));
EXPECT_SUCCEEDED(validator2_.Validate(parser_, &scenario_match_name_));
EXPECT_STREQ(kScenario1Name, scenario_match_name_);
}
TEST_F(CommandLineValidatorTest, Scenario2PassMulti) {
EXPECT_SUCCEEDED(parser_.ParseFromString(kScenario2CmdLine));
EXPECT_SUCCEEDED(validator2_.Validate(parser_, &scenario_match_name_));
EXPECT_STREQ(kScenario2Name, scenario_match_name_);
}
TEST_F(CommandLineValidatorTest, Scenario3PassMulti) {
EXPECT_SUCCEEDED(parser_.ParseFromString(kScenario3CmdLine));
EXPECT_SUCCEEDED(validator2_.Validate(parser_, &scenario_match_name_));
EXPECT_STREQ(kScenario3Name, scenario_match_name_);
}
TEST_F(CommandLineValidatorTest, ScenarioFailMulti) {
EXPECT_SUCCEEDED(parser_.ParseFromString(_T("Goopdate.exe /fail me /here")));
EXPECT_FAILED(validator2_.Validate(parser_, &scenario_match_name_));
}
} // namespace omaha