1 // Copyright 2017 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "bsdiff/bsdiff_arguments.h" 6 7 #include <vector> 8 9 #include <gtest/gtest.h> 10 11 namespace bsdiff { 12 13 TEST(BsdiffArgumentsTest, ParseCompressorTypeTest) { 14 CompressorType type; 15 EXPECT_TRUE(BsdiffArguments::ParseCompressorType("Brotli", &type)); 16 EXPECT_EQ(CompressorType::kBrotli, type); 17 18 EXPECT_TRUE(BsdiffArguments::ParseCompressorType("bz2", &type)); 19 EXPECT_EQ(CompressorType::kBZ2, type); 20 21 EXPECT_FALSE(BsdiffArguments::ParseCompressorType("invalid", &type)); 22 } 23 24 TEST(BsdiffArgumentsTest, ParseBsdiffFormatTest) { 25 BsdiffFormat format; 26 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("bsdf2", &format)); 27 EXPECT_EQ(BsdiffFormat::kBsdf2, format); 28 29 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("Legacy", &format)); 30 EXPECT_EQ(BsdiffFormat::kLegacy, format); 31 32 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("bsdiff40", &format)); 33 EXPECT_EQ(BsdiffFormat::kLegacy, format); 34 35 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("endsley", &format)); 36 EXPECT_EQ(BsdiffFormat::kEndsley, format); 37 38 EXPECT_FALSE(BsdiffArguments::ParseBsdiffFormat("Other", &format)); 39 } 40 41 TEST(BsdiffArgumentsTest, ParseQualityTest) { 42 int quality; 43 EXPECT_TRUE(BsdiffArguments::ParseQuality("9", &quality)); 44 EXPECT_EQ(9, quality); 45 46 // Check the out of range quality values. 47 EXPECT_FALSE(BsdiffArguments::ParseQuality("30", &quality)); 48 EXPECT_FALSE(BsdiffArguments::ParseQuality("1234567890", &quality)); 49 EXPECT_FALSE(BsdiffArguments::ParseQuality("aabb", &quality)); 50 } 51 52 TEST(BsdiffArgumentsTest, ParseMinLengthTest) { 53 size_t len; 54 EXPECT_TRUE(BsdiffArguments::ParseMinLength("11", &len)); 55 EXPECT_EQ(11U, len); 56 57 // Check the out of range quality values. 58 EXPECT_FALSE(BsdiffArguments::ParseMinLength("-1", &len)); 59 EXPECT_FALSE(BsdiffArguments::ParseMinLength("aabb", &len)); 60 } 61 62 TEST(BsdiffArgumentsTest, ArgumentsValidTest) { 63 // Default arguments using BsdiffFormat::kLegacy and CompressorType::kBZ2 64 // should be valid. 65 EXPECT_TRUE(BsdiffArguments().IsValid()); 66 67 // brotli is not supported for BsdiffFormat::kLegacy. 68 EXPECT_FALSE( 69 BsdiffArguments(BsdiffFormat::kLegacy, CompressorType::kBrotli, -1) 70 .IsValid()); 71 72 EXPECT_TRUE(BsdiffArguments(BsdiffFormat::kBsdf2, CompressorType::kBrotli, 9) 73 .IsValid()); 74 75 // Compression quality out of range for brotli. 76 EXPECT_FALSE( 77 BsdiffArguments(BsdiffFormat::kBsdf2, CompressorType::kBrotli, 20) 78 .IsValid()); 79 } 80 81 TEST(BsdiffArgumentsTest, ParseArgumentsSmokeTest) { 82 std::vector<const char*> args = {"bsdiff", "--format=bsdf2", "--type=brotli", 83 "--quality=9", "--minlen=12"}; 84 85 BsdiffArguments arguments; 86 EXPECT_TRUE( 87 arguments.ParseCommandLine(args.size(), const_cast<char**>(args.data()))); 88 89 EXPECT_EQ(BsdiffFormat::kBsdf2, arguments.format()); 90 EXPECT_EQ(CompressorType::kBrotli, arguments.compressor_type()); 91 EXPECT_EQ(9, arguments.compression_quality()); 92 EXPECT_EQ(12, arguments.min_length()); 93 } 94 95 } // namespace bsdiff 96