@@ -71,7 +71,6 @@ std::vector<TestData> clean_values = {
7171TEST (basictests, clean) {
7272 for (const auto & [input, expected] : clean_values) {
7373 auto cleaned_result = version_weaver::clean (input);
74- std::printf (" input: %s\n " , input.c_str ());
7574 ASSERT_EQ (cleaned_result.has_value (), expected.has_value ());
7675 if (cleaned_result.has_value ()) {
7776 ASSERT_EQ (cleaned_result->major , expected->major );
@@ -186,43 +185,83 @@ TEST(basictests, coerce) {
186185}
187186
188187using IncTestData = std::tuple<
189- version_weaver::version,
190- version_weaver::release_type,
191- std::expected<version_weaver::version, version_weaver::inc_error>
192- >;
188+ version_weaver::version, std::string, version_weaver::release_type,
189+ std::string,
190+ std::expected<version_weaver::version, version_weaver::parse_error>>;
193191
194192std::vector<IncTestData> inc_values = {
195- {version_weaver::version{" 1" , " 2" , " 3" }, version_weaver::release_type::MAJOR, version_weaver::version{" 2" , " 0" , " 0" }},
196- {version_weaver::version{" 1" , " 2" , " 3" }, version_weaver::release_type::MINOR, version_weaver::version{" 1" , " 3" , " 0" }},
197- {version_weaver::version{" 1" , " 2" , " 3" }, version_weaver::release_type::PATCH, version_weaver::version{" 1" , " 2" , " 4" }},
198- {version_weaver::version{" 1" , " 2" , " 3tag" }, version_weaver::release_type::MAJOR, version_weaver::version{" 2" , " 0" , " 0" }},
199- {version_weaver::version{" 1" , " 2" , " 3-tag" }, version_weaver::release_type::MAJOR, version_weaver::version{" 2" , " 0" , " 0" }},
200- {version_weaver::version{" 1" , " 2" , " 3" }, static_cast <version_weaver::release_type>(-1 ), std::unexpected (version_weaver::inc_error::INVALID_RELEASE_TYPE)},
201- {version_weaver::version{" 1" , " 2" , " 0-0" }, version_weaver::release_type::PATCH, version_weaver::version{" 1" , " 2" , " 0" }},
202- {version_weaver::version{" fake" }, version_weaver::release_type::MAJOR, std::unexpected (version_weaver::inc_error::INVALID_MAJOR)},
203- {version_weaver::version{" 1" , " 2" , " 3-4" }, version_weaver::release_type::MAJOR, version_weaver::version{" 2" , " 0" , " 0" }},
204- {version_weaver::version{" 1" , " 2" , " 3-4" }, version_weaver::release_type::MINOR, version_weaver::version{" 1" , " 3" , " 0" }},
205- {version_weaver::version{" 1" , " 2" , " 3-4" }, version_weaver::release_type::PATCH, version_weaver::version{" 1" , " 2" , " 3" }},
206- {version_weaver::version{" 1" , " 2" , " 3-alpha.0.beta" }, version_weaver::release_type::MAJOR, version_weaver::version{" 2" , " 0" , " 0" }},
207- {version_weaver::version{" 1" , " 2" , " 3-alpha.0.beta" }, version_weaver::release_type::MINOR, version_weaver::version{" 1" , " 3" , " 0" }},
208- {version_weaver::version{" 1" , " 2" , " 3-alpha.0.beta" }, version_weaver::release_type::PATCH, version_weaver::version{" 1" , " 2" , " 3" }},
193+ {version_weaver::version{" 1" , " 2" , " 3" }, " 1.2.3" ,
194+ version_weaver::release_type::MAJOR, " 2.0.0" ,
195+ version_weaver::version{" 2" , " 0" , " 0" }},
196+ {version_weaver::version{" 1" , " 2" , " 3" }, " 1.2.3" ,
197+ version_weaver::release_type::MINOR, " 1.3.0" ,
198+ version_weaver::version{" 1" , " 3" , " 0" }},
199+ {version_weaver::version{" 1" , " 2" , " 3" }, " 1.2.3" ,
200+ version_weaver::release_type::PATCH, " 1.2.4" ,
201+ version_weaver::version{" 1" , " 2" , " 4" }},
202+ {version_weaver::version{" 1" , " 2" , " 3" , " tag" }, " 1.2.3-tag" ,
203+ version_weaver::release_type::MAJOR, " 2.0.0" ,
204+ version_weaver::version{" 2" , " 0" , " 0" }},
205+ {version_weaver::version{" 1" , " 2" , " 3" }, " 1.2.3" ,
206+ static_cast <version_weaver::release_type>(-1 ), " " ,
207+ std::unexpected (version_weaver::parse_error::INVALID_RELEASE_TYPE)},
208+ {version_weaver::version{" 1" , " 2" , " 0" , " 0" }, " 1.2.0-0" ,
209+ version_weaver::release_type::PATCH, " 1.2.0" ,
210+ version_weaver::version{" 1" , " 2" , " 0" }},
211+ {version_weaver::version{" fake" }, " fake" ,
212+ version_weaver::release_type::MAJOR, " " ,
213+ std::unexpected (version_weaver::parse_error::INVALID_MAJOR)},
214+ {version_weaver::version{" 1" , " 2" , " 3" , " 4" }, " 1.2.3-4" ,
215+ version_weaver::release_type::MAJOR, " 2.0.0" ,
216+ version_weaver::version{" 2" , " 0" , " 0" }},
217+ {version_weaver::version{" 1" , " 2" , " 3" , " 4" }, " 1.2.3-4" ,
218+ version_weaver::release_type::MINOR, " 1.3.0" ,
219+ version_weaver::version{" 1" , " 3" , " 0" }},
220+ {version_weaver::version{" 1" , " 2" , " 3" , " 4" }, " 1.2.3-4" ,
221+ version_weaver::release_type::PATCH, " 1.2.3" ,
222+ version_weaver::version{" 1" , " 2" , " 3" }},
223+ {version_weaver::version{" 1" , " 2" , " 3" , " alpha.0.beta" },
224+ " 1.2.3-alpha.0.beta" , version_weaver::release_type::MAJOR, " 2.0.0" ,
225+ version_weaver::version{" 2" , " 0" , " 0" }},
226+ {version_weaver::version{" 1" , " 2" , " 3" , " alpha.0.beta" },
227+ " 1.2.3-alpha.0.beta" , version_weaver::release_type::MINOR, " 1.3.0" ,
228+ version_weaver::version{" 1" , " 3" , " 0" }},
229+ {version_weaver::version{" 1" , " 2" , " 3" , " alpha.0.beta" },
230+ " 1.2.3-alpha.0.beta" , version_weaver::release_type::PATCH, " 1.2.3" ,
231+ version_weaver::version{" 1" , " 2" , " 3" }},
209232};
210233
211234TEST (basictests, inc) {
212- for (const auto & [input, release_type, expected] : inc_values) {
213- auto incremented = version_weaver::inc (input, release_type);
214-
215- ASSERT_EQ (incremented.has_value (), expected.has_value ());
216- if (incremented.has_value ()) {
235+ for (const auto & [input, inputstr, release_type, str, expected] :
236+ inc_values) {
237+ auto incremented_str = version_weaver::inc (input, release_type);
238+ ASSERT_EQ (incremented_str.has_value (), expected.has_value ());
239+ if (incremented_str.has_value ()) {
240+ ASSERT_EQ (*incremented_str, str);
241+ auto incremented = version_weaver::parse (*incremented_str);
242+ ASSERT_TRUE (incremented.has_value ());
217243 ASSERT_EQ (incremented->major , expected->major );
218244 ASSERT_EQ (incremented->minor , expected->minor );
219245 ASSERT_EQ (incremented->patch , expected->patch );
220246 ASSERT_EQ (incremented->pre_release , expected->pre_release );
221247 ASSERT_EQ (incremented->build , expected->build );
222248 } else {
223- ASSERT_EQ (incremented .error (), expected.error ());
249+ ASSERT_EQ (incremented_str .error (), expected.error ());
224250 }
225251 }
226252
227253 SUCCEED ();
228254}
255+
256+ TEST (basictests, plus) {
257+ for (const auto & [input, inputstr, release_type, str, expected] :
258+ inc_values) {
259+ auto incremented_str = inputstr + release_type;
260+ ASSERT_EQ (incremented_str.has_value (), expected.has_value ());
261+ if (incremented_str.has_value ()) {
262+ ASSERT_EQ (*incremented_str, str);
263+ }
264+ }
265+
266+ SUCCEED ();
267+ }
0 commit comments