Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /base /version_unittest.cc
blob: 5faef8e093d63f16ce55d832147b967509dca3cc [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:06[diff] [blame]1// Copyright 2012 The Chromium Authors
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]5#include"base/version.h"
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]6
avi9b6f42932015-12-26 22:15:14[diff] [blame]7#include<stddef.h>
8#include<stdint.h>
Peter Kasting134ef9af2024-12-28 02:30:09[diff] [blame]9
staraz8fb38082016-07-25 18:48:21[diff] [blame]10#include<utility>
avi9b6f42932015-12-26 22:15:14[diff] [blame]11
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]12#include"testing/gtest/include/gtest/gtest.h"
13
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]14namespace{
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]15
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]16TEST(VersionTest,DefaultConstructor){
pwnall58f42cbc62016-08-26 19:04:44[diff] [blame]17 base::Version v;
cpu@chromium.org760024782011-06-07 17:21:30[diff] [blame]18 EXPECT_FALSE(v.IsValid());
19}
20
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]21TEST(VersionTest,ValueSemantics){
pwnall58f42cbc62016-08-26 19:04:44[diff] [blame]22 base::Version v1("1.2.3.4");
cpu@chromium.org760024782011-06-07 17:21:30[diff] [blame]23 EXPECT_TRUE(v1.IsValid());
pwnall58f42cbc62016-08-26 19:04:44[diff] [blame]24 base::Version v3;
cpu@chromium.org760024782011-06-07 17:21:30[diff] [blame]25 EXPECT_FALSE(v3.IsValid());
26{
pwnall58f42cbc62016-08-26 19:04:44[diff] [blame]27 base::Version v2(v1);
cpu@chromium.org760024782011-06-07 17:21:30[diff] [blame]28 v3= v2;
29 EXPECT_TRUE(v2.IsValid());
robpercivaldcd8b102016-01-25 19:39:00[diff] [blame]30 EXPECT_EQ(v1, v2);
cpu@chromium.org760024782011-06-07 17:21:30[diff] [blame]31}
robpercivaldcd8b102016-01-25 19:39:00[diff] [blame]32 EXPECT_EQ(v3, v1);
akalin@chromium.org26931bc2010-03-25 22:19:04[diff] [blame]33}
34
staraz8fb38082016-07-25 18:48:21[diff] [blame]35TEST(VersionTest,MoveSemantics){
36const std::vector<uint32_t> components={1,2,3,4};
pwnall58f42cbc62016-08-26 19:04:44[diff] [blame]37 base::Version v1(std::move(components));
staraz8fb38082016-07-25 18:48:21[diff] [blame]38 EXPECT_TRUE(v1.IsValid());
pwnall58f42cbc62016-08-26 19:04:44[diff] [blame]39 base::Version v2("1.2.3.4");
staraz8fb38082016-07-25 18:48:21[diff] [blame]40 EXPECT_EQ(v1, v2);
41}
42
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]43TEST(VersionTest,GetVersionFromString){
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]44staticconststruct version_string{
45constchar* input;
46size_t parts;
wfhbf68f4d5b2015-03-10 01:32:59[diff] [blame]47uint32_t firstpart;
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]48bool success;
49} cases[]={
Peter Kasting134ef9af2024-12-28 02:30:09[diff] [blame]50{"",0,0,false},
51{" ",0,0,false},
52{"\t",0,0,false},
53{"\n",0,0,false},
54{" ",0,0,false},
55{".",0,0,false},
56{" . ",0,0,false},
57{"0",1,0,true},
58{"0.",0,0,false},
59{"0.0",2,0,true},
60{"4294967295.0",2,4294967295,true},
61{"4294967296.0",0,0,false},
62{"-1.0",0,0,false},
63{"1.-1.0",0,0,false},
64{"1,--1.0",0,0,false},
65{"+1.0",0,0,false},
66{"1.+1.0",0,0,false},
67{"1+1.0",0,0,false},
68{"++1.0",0,0,false},
69{"1.0a",0,0,false},
70{"1.2.3.4.5.6.7.8.9.0",10,1,true},
71{"02.1",0,0,false},
72{"0.01",2,0,true},
73{"f.1",0,0,false},
74{"15.007.20011",3,15,true},
75{"15.5.28.130162",4,15,true},
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]76};
isherman@chromium.org12126d372012-07-11 18:40:53[diff] [blame]77
jdoerrie6c6229352018-10-22 15:55:43[diff] [blame]78for(constauto& i: cases){
79 base::Version version(i.input);
80 EXPECT_EQ(i.success, version.IsValid());
81if(i.success){
82 EXPECT_EQ(i.parts, version.components().size());
83 EXPECT_EQ(i.firstpart, version.components()[0]);
wfhbf68f4d5b2015-03-10 01:32:59[diff] [blame]84}
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]85}
86}
87
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]88TEST(VersionTest,Compare){
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]89staticconststruct version_compare{
90constchar* lhs;
91constchar* rhs;
92int expected;
93} cases[]={
Alexei Svitkine7bddd6c2017-12-04 16:44:09[diff] [blame]94{"1.0","1.0",0},
95{"1.0","0.0",1},
96{"1.0","2.0",-1},
97{"1.0","1.1",-1},
98{"1.1","1.0",1},
99{"1.0","1.0.1",-1},
100{"1.1","1.0.1",1},
101{"1.1","1.0.1",1},
102{"1.0.0","1.0",0},
103{"1.0.3","1.0.20",-1},
104{"11.0.10","15.007.20011",-1},
105{"11.0.10","15.5.28.130162",-1},
106{"15.5.28.130162","15.5.28.130162",0},
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]107};
jdoerrie6c6229352018-10-22 15:55:43[diff] [blame]108for(constauto& i: cases){
109 base::Version lhs(i.lhs);
110 base::Version rhs(i.rhs);
111 EXPECT_EQ(lhs.CompareTo(rhs), i.expected)<< i.lhs<<" ? "<< i.rhs;
Alexei Svitkine7bddd6c2017-12-04 16:44:09[diff] [blame]112// CompareToWildcardString() should have same behavior as CompareTo() when
113// no wildcards are present.
jdoerrie6c6229352018-10-22 15:55:43[diff] [blame]114 EXPECT_EQ(lhs.CompareToWildcardString(i.rhs), i.expected)
115<< i.lhs<<" ? "<< i.rhs;
116 EXPECT_EQ(rhs.CompareToWildcardString(i.lhs),-i.expected)
117<< i.lhs<<" ? "<< i.rhs;
cpu@chromium.org30c157c2011-08-01 17:45:08[diff] [blame]118
robpercivaldcd8b102016-01-25 19:39:00[diff] [blame]119// Test comparison operators
jdoerrie6c6229352018-10-22 15:55:43[diff] [blame]120switch(i.expected){
121case-1:
122 EXPECT_LT(lhs, rhs);
123 EXPECT_LE(lhs, rhs);
124 EXPECT_NE(lhs, rhs);
125 EXPECT_FALSE(lhs== rhs);
126 EXPECT_FALSE(lhs>= rhs);
127 EXPECT_FALSE(lhs> rhs);
128break;
129case0:
130 EXPECT_FALSE(lhs< rhs);
131 EXPECT_LE(lhs, rhs);
132 EXPECT_FALSE(lhs!= rhs);
133 EXPECT_EQ(lhs, rhs);
134 EXPECT_GE(lhs, rhs);
135 EXPECT_FALSE(lhs> rhs);
136break;
137case1:
138 EXPECT_FALSE(lhs< rhs);
139 EXPECT_FALSE(lhs<= rhs);
140 EXPECT_NE(lhs, rhs);
141 EXPECT_FALSE(lhs== rhs);
142 EXPECT_GE(lhs, rhs);
143 EXPECT_GT(lhs, rhs);
144break;
robpercivaldcd8b102016-01-25 19:39:00[diff] [blame]145}
erikkay@google.com19b8d82f2009-01-29 19:18:57[diff] [blame]146}
147}
mathp@google.com810b25082012-07-04 16:22:48[diff] [blame]148
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]149TEST(VersionTest,CompareToWildcardString){
mathp@google.com810b25082012-07-04 16:22:48[diff] [blame]150staticconststruct version_compare{
151constchar* lhs;
152constchar* rhs;
153int expected;
154} cases[]={
Peter Kasting134ef9af2024-12-28 02:30:09[diff] [blame]155{"1.0","1.*",0},{"1.0","0.*",1},{"1.0","2.*",-1},
156{"1.2.3","1.2.3.*",0},{"10.0","1.0.*",1},{"1.0","3.0.*",-1},
157{"1.4","1.3.0.*",1},{"1.3.9","1.3.*",0},{"1.4.1","1.3.*",1},
158{"1.3","1.4.5.*",-1},{"1.5","1.4.5.*",1},{"1.3.9","1.3.*",0},
159{"1.2.0.0.0.0","1.2.*",0},
mathp@google.com810b25082012-07-04 16:22:48[diff] [blame]160};
jdoerrie6c6229352018-10-22 15:55:43[diff] [blame]161for(constauto& i: cases){
162const base::Version version(i.lhs);
163constint result= version.CompareToWildcardString(i.rhs);
164 EXPECT_EQ(result, i.expected)<< i.lhs<<"?"<< i.rhs;
mathp@google.com810b25082012-07-04 16:22:48[diff] [blame]165}
166}
167
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]168TEST(VersionTest,IsValidWildcardString){
mathp@google.com810b25082012-07-04 16:22:48[diff] [blame]169staticconststruct version_compare{
170constchar* version;
171bool expected;
172} cases[]={
Peter Kasting134ef9af2024-12-28 02:30:09[diff] [blame]173{"1.0",true},{"",false},{"1.2.3.4.5.6",true},
174{"1.2.3.*",true},{"1.2.3.5*",false},{"1.2.3.56*",false},
175{"1.*.3",false},{"20.*",true},{"+2.*",false},
176{"*",false},{"*.2",false},
mathp@google.com810b25082012-07-04 16:22:48[diff] [blame]177};
jdoerrie6c6229352018-10-22 15:55:43[diff] [blame]178for(constauto& i: cases){
179 EXPECT_EQ(base::Version::IsValidWildcardString(i.version), i.expected)
180<< i.version<<"?"<< i.expected;
mathp@google.com810b25082012-07-04 16:22:48[diff] [blame]181}
182}
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]183
Devlin Cronin85511cc2020-06-06 00:52:39[diff] [blame]184TEST(VersionTest,LeadingZeros){
185{
186// Leading zeros in the first component are not allowed.
187 base::Version v("01.1");
188 EXPECT_FALSE(v.IsValid());
189}
190
191{
192// Leading zeros in subsequent components are allowed (and this behavior is
193// now important for compatibility with existing modules, like extensions),
194// but are ignored because the value is parsed as an integer...
195 base::Version v1("1.01");
196 EXPECT_TRUE(v1.IsValid());
197// ...and as a result, v1.01 == v1.1.
198 EXPECT_EQ("1.1", v1.GetString());
199 base::Version v2("1.1");
200 EXPECT_EQ(v1, v2);
201}
202
203// Similarly, since leading zeros are ignored, v1.02 > v1.1 (because
204// v1.02 is translated to 1.2).
205 EXPECT_GT(base::Version("1.02"), base::Version("1.1"));
206}
207
John Rummell42b76ce42021-10-11 23:44:40[diff] [blame]208TEST(VersionTest,GetString){
209staticconststruct version_compare{
210constchar* version;
211bool valid;
212constchar* string;
213} cases[]={
214{"",false,"invalid"},
215{"1",true,"1"},
216{"1.0",true,"1.0"},
217{"0.0.1.0",true,"0.0.1.0"},
218{"1.2.3.4.5.6",true,"1.2.3.4.5.6"},
219{"1.*.3",false,"invalid"},
220};
221
222for(constauto& i: cases){
223 base::Version v(i.version);
224 EXPECT_EQ(v.IsValid(), i.valid);
225 EXPECT_EQ(v.GetString(), i.string);
226}
227}
228
tfarina@chromium.org35dabb162012-12-03 17:04:28[diff] [blame]229}// namespace

[8]ページ先頭

©2009-2025 Movatter.jp