blob: 9cab8207a837de251f402794f4c5519186f9817d [file] [log] [blame]
/*
* Copyright (c) 2018, Google Inc.
* All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "perf_to_profile_lib.h"
#include "base/logging.h"
#include "test_compat.h"
namespace {
using ::testing::Eq;
TEST(PerfToProfileTest, ParseArguments) {
struct Test {
string desc;
std::vector<const char*> argv;
string expectedInput;
string expectedOutput;
bool expectedOverwriteOutput;
bool wantError;
};
std::vector<Test> tests;
tests.push_back(Test{
.desc = "With input, output and overwrite flags",
.argv = {"<exec>", "-i", "input_perf_file", "-o", "output_profile", "-f"},
.expectedInput = "input_perf_file",
.expectedOutput = "output_profile",
.expectedOverwriteOutput = true,
.wantError = false,
});
tests.push_back(Test{
.desc = "With input and output flags",
.argv = {"<exec>", "-i", "input_perf_file", "-o", "output_profile"},
.expectedInput = "input_perf_file",
.expectedOutput = "output_profile",
.expectedOverwriteOutput = false,
.wantError = false,
});
tests.push_back(Test{
.desc = "With only overwrite flag",
.argv = {"<exec>", "-f"},
.expectedInput = "",
.expectedOutput = "",
.expectedOverwriteOutput = false,
.wantError = true,
});
tests.push_back(Test{
.desc = "With input, output, and invalid flags",
.argv = {"<exec>", "-i", "input_perf_file", "-o", "output_profile", "-F"},
.expectedInput = "",
.expectedOutput = "",
.expectedOverwriteOutput = false,
.wantError = true,
});
tests.push_back(Test{
.desc = "With an invalid flag",
.argv = {"<exec>", "-F"},
.expectedInput = "",
.expectedOutput = "",
.expectedOverwriteOutput = false,
.wantError = true,
});
for (auto test : tests) {
string input;
string output;
bool overwriteOutput;
LOG(INFO) << "Testing: " << test.desc;
EXPECT_THAT(ParseArguments(test.argv.size(), test.argv.data(), &input,
&output, &overwriteOutput),
Eq(!test.wantError));
if (!test.wantError) {
EXPECT_THAT(input, Eq(test.expectedInput));
EXPECT_THAT(output, Eq(test.expectedOutput));
EXPECT_THAT(overwriteOutput, Eq(test.expectedOverwriteOutput));
}
optind = 1;
}
}
} // namespace
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}