Home | History | Annotate | Download | only in bsdiff
      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