1
1
#include " version_weaver.h"
2
- #include < cstdlib>
3
- #include < vector>
4
2
#include < format>
3
+ #include < vector>
4
+
5
+ #include < gtest/gtest.h>
6
+
7
+ using TestData =
8
+ std::pair<std::string, std::expected<version_weaver::Version,
9
+ version_weaver::ParseError>>;
10
+ std::vector<TestData> parse_values = {
11
+ {" 1.0.0" , version_weaver::Version{" 1" , " 0" , " 0" }},
12
+ {" 1.0.0-alpha" , version_weaver::Version{" 1" , " 0" , " 0" , " alpha" }},
13
+ {" 1.0.0-alpha.1" , version_weaver::Version{" 1" , " 0" , " 0" , " alpha.1" }},
14
+ {" 1.0.0-0.3.7" , version_weaver::Version{" 1" , " 0" , " 0" , " 0.3.7" }},
15
+ {" 1.0.0-x.7.z.92" , version_weaver::Version{" 1" , " 0" , " 0" , " x.7.z.92" }},
16
+ {" 1.0.0-x-y-z.--" , version_weaver::Version{" 1" , " 0" , " 0" , " x-y-z.--" }},
17
+ {" 1.0.0-alpha+001" , version_weaver::Version{" 1" , " 0" , " 0" , " alpha" , " 001" }},
18
+ {" 1.0.0+20130313144700" ,
19
+ version_weaver::Version{" 1" , " 0" , " 0" , std::nullopt, " 20130313144700" }},
20
+ {" 1.0.0-beta+exp.sha.5114f85" ,
21
+ version_weaver::Version{" 1" , " 0" , " 0" , " beta" , " exp.sha.5114f85" }},
22
+ {" 1.0.0+21AF26D3----117B344092BD" ,
23
+ version_weaver::Version{" 1" , " 0" , " 0" , std::nullopt,
24
+ " 21AF26D3----117B344092BD" }},
5
25
6
- std::vector<std::pair<std::string, std::expected<version_weaver::Version,
7
- version_weaver::ParseError>>>
8
- test_values = {
9
- {" 1.0.0" , version_weaver::Version{" 1" , " 0" , " 0" }},
10
- {" 1.0.0-alpha" , version_weaver::Version{" 1" , " 0" , " 0" , " alpha" }},
11
- {" 1.0.0-alpha.1" , version_weaver::Version{" 1" , " 0" , " 0" , " alpha.1" }},
12
- {" 1.0.0-0.3.7" , version_weaver::Version{" 1" , " 0" , " 0" , " 0.3.7" }},
13
- {" 1.0.0-x.7.z.92" , version_weaver::Version{" 1" , " 0" , " 0" , " x.7.z.92" }},
14
- {" 1.0.0-x-y-z.--" , version_weaver::Version{" 1" , " 0" , " 0" , " x-y-z.--" }},
15
- {" 1.0.0-alpha+001" ,
16
- version_weaver::Version{" 1" , " 0" , " 0" , " alpha" , " 001" }},
17
- {" 1.0.0+20130313144700" ,
18
- version_weaver::Version{" 1" , " 0" , " 0" , " " , " 20130313144700" }},
19
- {" 1.0.0-beta+exp.sha.5114f85" ,
20
- version_weaver::Version{" 1" , " 0" , " 0" , " beta" , " exp.sha.5114f85" }},
21
- {" 1.0.0+21AF26D3----117B344092BD" ,
22
- version_weaver::Version{" 1" , " 0" , " 0" , " " ,
23
- " 21AF26D3----117B344092BD" }},
24
26
};
25
27
26
- bool test_parse ( ) {
27
- for (const auto & [input, expected] : test_values ) {
28
- auto result = version_weaver::parse (input);
29
- if ( bool (result) != bool ( expected)) {
30
- std::printf ( " Expected %d, got %d \n " , bool (expected), bool (result));
31
- return false ;
32
- }
33
- if ( bool (result)) {
34
- if (result. value () != expected. value ()) {
35
- std::printf ( " Expected \n " );
36
- return false ;
37
- }
28
+ TEST (basictests, parse ) {
29
+ for (const auto & [input, expected] : parse_values ) {
30
+ auto parse_result = version_weaver::parse (input);
31
+ ASSERT_EQ (parse_result. has_value (), expected. has_value ());
32
+ if (parse_result. has_value ()) {
33
+ ASSERT_EQ (parse_result-> major , expected-> major ) ;
34
+ ASSERT_EQ (parse_result-> minor , expected-> minor );
35
+ ASSERT_EQ (parse_result-> patch , expected-> patch );
36
+ ASSERT_EQ (parse_result-> pre_release , expected-> pre_release );
37
+ ASSERT_EQ (parse_result-> build , expected-> build );
38
+ } else {
39
+ ASSERT_EQ (parse_result. error (), expected. error ());
38
40
}
39
41
}
40
- return true ;
42
+
43
+ SUCCEED ();
41
44
}
42
- int main () {
43
- if (!test_parse ()) {
44
- std::printf (" Test failed\n " );
45
- return EXIT_FAILURE;
45
+
46
+ // A normal version number MUST take the form X.Y.Z
47
+ // where X, Y, and Z are non-negative integers, and
48
+ // MUST NOT contain leading zeroes.
49
+ TEST (basictests, leading_zeroes) {
50
+ ASSERT_FALSE (version_weaver::parse (" 0.0.0" ).has_value ());
51
+ ASSERT_FALSE (version_weaver::parse (" 01.0.0" ).has_value ());
52
+ ASSERT_FALSE (version_weaver::parse (" 1.01.0" ).has_value ());
53
+ ASSERT_FALSE (version_weaver::parse (" 1.0.01" ).has_value ());
54
+ }
55
+
56
+ std::vector<TestData> clean_values = {
57
+ {" 1.2.3" , version_weaver::Version{" 1" , " 2" , " 3" }},
58
+ {" 1.2.3 " , version_weaver::Version{" 1" , " 2" , " 3" }},
59
+ {" 1.2.3-4 " , version_weaver::Version{" 1" , " 2" , " 3" , " 4" }},
60
+ {" 1.2.3-pre " , version_weaver::Version{" 1" , " 2" , " 3" , " pre" }},
61
+ {" =v1.2.3 " , version_weaver::Version{" 1" , " 2" , " 3" }},
62
+ {" v1.2.3" , version_weaver::Version{" 1" , " 2" , " 3" }},
63
+ {" v1.2.3 " , version_weaver::Version{" 1" , " 2" , " 3" }},
64
+ {" \t 1.2.3" , version_weaver::Version{" 1" , " 2" , " 3" }},
65
+ {" >1.2.3" , std::unexpected (version_weaver::ParseError::INVALID_INPUT)},
66
+ {" ~1.2.3" , std::unexpected (version_weaver::ParseError::INVALID_INPUT)},
67
+ {" <=1.2.3" , std::unexpected (version_weaver::ParseError::INVALID_INPUT)},
68
+ {" 1.2.x" , std::unexpected (version_weaver::ParseError::INVALID_INPUT)},
69
+ };
70
+
71
+ TEST (basictests, clean) {
72
+ for (const auto & [input, expected] : clean_values) {
73
+ auto cleaned_result = version_weaver::clean (input);
74
+ std::printf (" input: %s\n " , input.c_str ());
75
+ ASSERT_EQ (cleaned_result.has_value (), expected.has_value ());
76
+ if (cleaned_result.has_value ()) {
77
+ ASSERT_EQ (cleaned_result->major , expected->major );
78
+ ASSERT_EQ (cleaned_result->minor , expected->minor );
79
+ ASSERT_EQ (cleaned_result->patch , expected->patch );
80
+ ASSERT_EQ (cleaned_result->pre_release , expected->pre_release );
81
+ ASSERT_EQ (cleaned_result->build , expected->build );
82
+ } else {
83
+ ASSERT_EQ (cleaned_result.error (), expected.error ());
84
+ }
46
85
}
47
- std::printf (" Tests succeeded!\n " );
48
- return EXIT_SUCCESS;
49
- }
86
+ }
0 commit comments