1/* 2 * Copyright 2010 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include "webrtc/base/versionparsing.h" 12 13#include "webrtc/base/gunit.h" 14 15namespace rtc { 16 17static const int kExampleSegments = 4; 18 19typedef int ExampleVersion[kExampleSegments]; 20 21TEST(VersionParsing, TestGoodParse) { 22 ExampleVersion ver; 23 std::string str1("1.1.2.0"); 24 static const ExampleVersion expect1 = {1, 1, 2, 0}; 25 EXPECT_TRUE(ParseVersionString(str1, kExampleSegments, ver)); 26 EXPECT_EQ(0, CompareVersions(ver, expect1, kExampleSegments)); 27 std::string str2("2.0.0.1"); 28 static const ExampleVersion expect2 = {2, 0, 0, 1}; 29 EXPECT_TRUE(ParseVersionString(str2, kExampleSegments, ver)); 30 EXPECT_EQ(0, CompareVersions(ver, expect2, kExampleSegments)); 31} 32 33TEST(VersionParsing, TestBadParse) { 34 ExampleVersion ver; 35 std::string str1("1.1.2"); 36 EXPECT_FALSE(ParseVersionString(str1, kExampleSegments, ver)); 37 std::string str2(""); 38 EXPECT_FALSE(ParseVersionString(str2, kExampleSegments, ver)); 39 std::string str3("garbarge"); 40 EXPECT_FALSE(ParseVersionString(str3, kExampleSegments, ver)); 41} 42 43TEST(VersionParsing, TestCompare) { 44 static const ExampleVersion ver1 = {1, 0, 21, 0}; 45 static const ExampleVersion ver2 = {1, 1, 2, 0}; 46 static const ExampleVersion ver3 = {1, 1, 3, 0}; 47 static const ExampleVersion ver4 = {1, 1, 3, 9861}; 48 49 // Test that every combination of comparisons has the expected outcome. 50 EXPECT_EQ(0, CompareVersions(ver1, ver1, kExampleSegments)); 51 EXPECT_EQ(0, CompareVersions(ver2, ver2, kExampleSegments)); 52 EXPECT_EQ(0, CompareVersions(ver3, ver3, kExampleSegments)); 53 EXPECT_EQ(0, CompareVersions(ver4, ver4, kExampleSegments)); 54 55 EXPECT_GT(0, CompareVersions(ver1, ver2, kExampleSegments)); 56 EXPECT_LT(0, CompareVersions(ver2, ver1, kExampleSegments)); 57 58 EXPECT_GT(0, CompareVersions(ver1, ver3, kExampleSegments)); 59 EXPECT_LT(0, CompareVersions(ver3, ver1, kExampleSegments)); 60 61 EXPECT_GT(0, CompareVersions(ver1, ver4, kExampleSegments)); 62 EXPECT_LT(0, CompareVersions(ver4, ver1, kExampleSegments)); 63 64 EXPECT_GT(0, CompareVersions(ver2, ver3, kExampleSegments)); 65 EXPECT_LT(0, CompareVersions(ver3, ver2, kExampleSegments)); 66 67 EXPECT_GT(0, CompareVersions(ver2, ver4, kExampleSegments)); 68 EXPECT_LT(0, CompareVersions(ver4, ver2, kExampleSegments)); 69 70 EXPECT_GT(0, CompareVersions(ver3, ver4, kExampleSegments)); 71 EXPECT_LT(0, CompareVersions(ver4, ver3, kExampleSegments)); 72} 73 74} // namespace rtc 75