blob: 412fac58c1f301854342583964968ec9c64ccc4c [file] [log] [blame]
Tianjie Xu1f1cdb22017-11-20 11:05:55 -08001// 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
Alex Deymo383f6772018-02-08 15:50:11 +01005#include "bsdiff/bsdiff_arguments.h"
Tianjie Xu1f1cdb22017-11-20 11:05:55 -08006
Tianjie Xu1f1cdb22017-11-20 11:05:55 -08007#include <gtest/gtest.h>
8
9namespace bsdiff {
10
11TEST(BsdiffArgumentsTest, ParseCompressorTypeTest) {
Tianjie Xu77833b62018-03-07 18:13:47 -080012 std::set<CompressorType> types;
13 EXPECT_TRUE(BsdiffArguments::ParseCompressorTypes("Brotli", &types));
14 EXPECT_EQ(1U, types.size());
15 EXPECT_NE(types.end(), types.find(CompressorType::kBrotli));
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080016
Tianjie Xu77833b62018-03-07 18:13:47 -080017 types.clear();
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080018
Tianjie Xu77833b62018-03-07 18:13:47 -080019 EXPECT_TRUE(BsdiffArguments::ParseCompressorTypes("bz2", &types));
20 EXPECT_EQ(1U, types.size());
21 EXPECT_NE(types.end(), types.find(CompressorType::kBZ2));
22
23 types.clear();
24
25 EXPECT_FALSE(BsdiffArguments::ParseCompressorTypes("invalid", &types));
26}
27
28TEST(BsdiffArgumentsTest, ParseMultipleCompressorTypeTest) {
29 std::set<CompressorType> types;
30 EXPECT_TRUE(BsdiffArguments::ParseCompressorTypes("bz2:brotli:nocompression",
31 &types));
32 EXPECT_EQ(3U, types.size());
33 EXPECT_NE(types.end(), types.find(CompressorType::kBrotli));
34 EXPECT_NE(types.end(), types.find(CompressorType::kBZ2));
35 EXPECT_NE(types.end(), types.find(CompressorType::kNoCompression));
36
37 types.clear();
38
39 // No space in the type string.
40 EXPECT_FALSE(
41 BsdiffArguments::ParseCompressorTypes("bz2 : nocompression", &types));
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080042}
43
44TEST(BsdiffArgumentsTest, ParseBsdiffFormatTest) {
45 BsdiffFormat format;
46 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("bsdf2", &format));
47 EXPECT_EQ(BsdiffFormat::kBsdf2, format);
48
49 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("Legacy", &format));
50 EXPECT_EQ(BsdiffFormat::kLegacy, format);
51
52 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("bsdiff40", &format));
53 EXPECT_EQ(BsdiffFormat::kLegacy, format);
54
Alex Deymoe790a3b2017-11-09 18:09:11 +010055 EXPECT_TRUE(BsdiffArguments::ParseBsdiffFormat("endsley", &format));
56 EXPECT_EQ(BsdiffFormat::kEndsley, format);
57
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080058 EXPECT_FALSE(BsdiffArguments::ParseBsdiffFormat("Other", &format));
59}
60
61TEST(BsdiffArgumentsTest, ParseQualityTest) {
62 int quality;
Tianjie Xu2e70b552018-03-02 16:22:10 -080063 EXPECT_TRUE(BsdiffArguments::ParseQuality("9", &quality, 0, 11));
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080064 EXPECT_EQ(9, quality);
65
66 // Check the out of range quality values.
Tianjie Xu2e70b552018-03-02 16:22:10 -080067 EXPECT_FALSE(BsdiffArguments::ParseQuality("30", &quality, 0, 11));
68 EXPECT_FALSE(BsdiffArguments::ParseQuality("1234567890", &quality, 0, 1000));
69 EXPECT_FALSE(BsdiffArguments::ParseQuality("aabb", &quality, 0, 1000));
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080070}
71
Alex Deymo383f6772018-02-08 15:50:11 +010072TEST(BsdiffArgumentsTest, ParseMinLengthTest) {
73 size_t len;
74 EXPECT_TRUE(BsdiffArguments::ParseMinLength("11", &len));
75 EXPECT_EQ(11U, len);
76
77 // Check the out of range quality values.
78 EXPECT_FALSE(BsdiffArguments::ParseMinLength("-1", &len));
79 EXPECT_FALSE(BsdiffArguments::ParseMinLength("aabb", &len));
80}
81
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080082TEST(BsdiffArgumentsTest, ArgumentsValidTest) {
83 // Default arguments using BsdiffFormat::kLegacy and CompressorType::kBZ2
84 // should be valid.
85 EXPECT_TRUE(BsdiffArguments().IsValid());
86
87 // brotli is not supported for BsdiffFormat::kLegacy.
88 EXPECT_FALSE(
Tianjie Xu77833b62018-03-07 18:13:47 -080089 BsdiffArguments(BsdiffFormat::kLegacy, {CompressorType::kBrotli}, -1)
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080090 .IsValid());
91
Tianjie Xu77833b62018-03-07 18:13:47 -080092 EXPECT_TRUE(
93 BsdiffArguments(BsdiffFormat::kBsdf2, {CompressorType::kBrotli}, 9)
94 .IsValid());
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080095
96 // Compression quality out of range for brotli.
97 EXPECT_FALSE(
Tianjie Xu77833b62018-03-07 18:13:47 -080098 BsdiffArguments(BsdiffFormat::kBsdf2, {CompressorType::kBrotli}, 20)
Tianjie Xu1f1cdb22017-11-20 11:05:55 -080099 .IsValid());
100}
101
102TEST(BsdiffArgumentsTest, ParseArgumentsSmokeTest) {
Tianjie Xu77833b62018-03-07 18:13:47 -0800103 std::vector<const char*> args = {"bsdiff", "--format=bsdf2",
104 "--type=brotli:bz2", "--brotli_quality=9",
105 "--minlen=12"};
Tianjie Xu1f1cdb22017-11-20 11:05:55 -0800106
107 BsdiffArguments arguments;
Alex Deymo383f6772018-02-08 15:50:11 +0100108 EXPECT_TRUE(
109 arguments.ParseCommandLine(args.size(), const_cast<char**>(args.data())));
Tianjie Xu1f1cdb22017-11-20 11:05:55 -0800110
111 EXPECT_EQ(BsdiffFormat::kBsdf2, arguments.format());
Tianjie Xu77833b62018-03-07 18:13:47 -0800112
113 std::vector<CompressorType> types = {CompressorType::kBZ2,
114 CompressorType::kBrotli};
115 EXPECT_EQ(types, arguments.compressor_types());
116
Tianjie Xu2e70b552018-03-02 16:22:10 -0800117 EXPECT_EQ(9, arguments.brotli_quality());
Alex Deymo383f6772018-02-08 15:50:11 +0100118 EXPECT_EQ(12, arguments.min_length());
Tianjie Xu1f1cdb22017-11-20 11:05:55 -0800119}
120
121} // namespace bsdiff