TestFromStringView.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * Copyright (c) 2023, Gurkirat Singh <tbhaxor@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <AK/StringView.h>
  7. #include <AK/Tuple.h>
  8. #include <AK/Vector.h>
  9. #include <LibSemVer/SemVer.h>
  10. #include <LibTest/TestCase.h>
  11. TEST_CASE(parsing) // NOLINT(readability-function-cognitive-complexity)
  12. {
  13. EXPECT(!SemVer::is_valid("1"sv));
  14. EXPECT(!SemVer::is_valid("1.2"sv));
  15. EXPECT(!SemVer::is_valid("1.1.2+.123"sv));
  16. EXPECT(!SemVer::is_valid("1.2.3-0123"sv));
  17. EXPECT(!SemVer::is_valid("1.2.3-0123.0123"sv));
  18. EXPECT(!SemVer::is_valid("+invalid"sv));
  19. EXPECT(!SemVer::is_valid("-invalid"sv));
  20. EXPECT(!SemVer::is_valid("-invalid+invalid"sv));
  21. EXPECT(!SemVer::is_valid("-invalid.01"sv));
  22. EXPECT(!SemVer::is_valid("1 .2.3-this.is.invalid"sv));
  23. EXPECT(!SemVer::is_valid("1.2.3-this .is. also .invalid"sv));
  24. EXPECT(!SemVer::is_valid("1.2.3"sv, ' '));
  25. EXPECT(!SemVer::is_valid("alpha"sv));
  26. EXPECT(!SemVer::is_valid("alpha.beta"sv));
  27. EXPECT(!SemVer::is_valid("alpha.beta.1"sv));
  28. EXPECT(!SemVer::is_valid("alpha.1"sv));
  29. EXPECT(!SemVer::is_valid("alpha+beta"sv));
  30. EXPECT(!SemVer::is_valid("alpha_beta"sv));
  31. EXPECT(!SemVer::is_valid("alpha."sv));
  32. EXPECT(!SemVer::is_valid("alpha.."sv));
  33. EXPECT(!SemVer::is_valid("beta"sv));
  34. EXPECT(!SemVer::is_valid("1.0.0-alpha_beta"sv));
  35. EXPECT(!SemVer::is_valid("-alpha."sv));
  36. EXPECT(!SemVer::is_valid("1.0.0-alpha.."sv));
  37. EXPECT(!SemVer::is_valid("1.0.0-alpha..1"sv));
  38. EXPECT(!SemVer::is_valid("1.0.0-alpha...1"sv));
  39. EXPECT(!SemVer::is_valid("1.0.0-alpha....1"sv));
  40. EXPECT(!SemVer::is_valid("1.0.0-alpha.....1"sv));
  41. EXPECT(!SemVer::is_valid("1.0.0-alpha......1"sv));
  42. EXPECT(!SemVer::is_valid("1.0.0-alpha.......1"sv));
  43. EXPECT(!SemVer::is_valid("01.1.1"sv));
  44. EXPECT(!SemVer::is_valid("1.01.1"sv));
  45. EXPECT(!SemVer::is_valid("1.1.01"sv));
  46. EXPECT(!SemVer::is_valid("1.2"sv));
  47. EXPECT(!SemVer::is_valid("1.2.3.DEV"sv));
  48. EXPECT(!SemVer::is_valid("1.2-SNAPSHOT"sv));
  49. EXPECT(!SemVer::is_valid("1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788"sv));
  50. EXPECT(!SemVer::is_valid("1.2-RC-SNAPSHOT"sv));
  51. EXPECT(!SemVer::is_valid("-1.0.3-gamma+b7718"sv));
  52. EXPECT(!SemVer::is_valid("+justmeta"sv));
  53. EXPECT(!SemVer::is_valid("9.8.7+meta+meta"sv));
  54. EXPECT(!SemVer::is_valid("9.8.7-whatever+meta+meta"sv));
  55. // Because of size_t overflow, it won't work work version such as 99999999999999999999999
  56. EXPECT(!SemVer::is_valid("99999999999999999999999.999999999999999999.99999999999999999"sv));
  57. EXPECT(SemVer::is_valid("1.0.4"sv));
  58. EXPECT(SemVer::is_valid("1.2.3"sv));
  59. EXPECT(SemVer::is_valid("10.20.30"sv));
  60. EXPECT(SemVer::is_valid("1.1.2-prerelease+meta"sv));
  61. EXPECT(SemVer::is_valid("1.1.2+meta"sv));
  62. EXPECT(SemVer::is_valid("1.1.2+meta-valid"sv));
  63. EXPECT(SemVer::is_valid("1.0.0-alpha"sv));
  64. EXPECT(SemVer::is_valid("1.0.0-beta"sv));
  65. EXPECT(SemVer::is_valid("1.0.0-alpha.beta"sv));
  66. EXPECT(SemVer::is_valid("1.0.0-alpha.beta.1"sv));
  67. EXPECT(SemVer::is_valid("1.0.0-alpha.1"sv));
  68. EXPECT(SemVer::is_valid("1.0.0-alpha0.valid"sv));
  69. EXPECT(SemVer::is_valid("1.0.0-alpha.0valid"sv));
  70. EXPECT(SemVer::is_valid("1.0.0-rc.1+build.1"sv));
  71. EXPECT(SemVer::is_valid("2.0.0-rc.1+build.123"sv));
  72. EXPECT(SemVer::is_valid("1.2.3-beta"sv));
  73. EXPECT(SemVer::is_valid("10.2.3-DEV-SNAPSHOT"sv));
  74. EXPECT(SemVer::is_valid("1.2.3-SNAPSHOT-123"sv));
  75. EXPECT(SemVer::is_valid("1.0.0"sv));
  76. EXPECT(SemVer::is_valid("2.0.0"sv));
  77. EXPECT(SemVer::is_valid("1.1.7"sv));
  78. EXPECT(SemVer::is_valid("2.0.0+build.1848"sv));
  79. EXPECT(SemVer::is_valid("2.0.1-alpha.1227"sv));
  80. EXPECT(SemVer::is_valid("1.0.0-alpha+beta"sv));
  81. EXPECT(SemVer::is_valid("1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay"sv));
  82. EXPECT(SemVer::is_valid("1.2.3----RC-SNAPSHOT.12.9.1--.12+788"sv));
  83. EXPECT(SemVer::is_valid("1.2.3----R-S.12.9.1--.12+meta"sv));
  84. EXPECT(SemVer::is_valid("1.2.3----RC-SNAPSHOT.12.9.1--.12"sv));
  85. EXPECT(SemVer::is_valid("1.0.0+0.build.1-rc.10000aaa-kk-0.1"sv));
  86. EXPECT(SemVer::is_valid("1.0.0-0A.is.legal"sv));
  87. }
  88. TEST_CASE(parse_with_different_mmp_sep)
  89. {
  90. // insufficient separators
  91. EXPECT(!SemVer::is_valid("1.2-3"sv));
  92. EXPECT(!SemVer::is_valid("1.2-3"sv, '-'));
  93. // conflicting separators
  94. EXPECT(!SemVer::is_valid("11213"sv, '1'));
  95. // sufficient separators
  96. EXPECT(SemVer::is_valid("1.2.3"sv, '.'));
  97. EXPECT(SemVer::is_valid("1-2-3"sv, '-'));
  98. EXPECT(SemVer::is_valid("1-3-3-pre+build"sv, '-'));
  99. }