aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/package/version
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 00:54:07 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 00:54:07 +0900
commitf375673ef91a67777419eec909470c69e3f88a9b (patch)
tree37c423244f66607e587c97ba813c1ecaf7ad8650 /crates/shirabe/tests/package/version
parentc396d54f0302658304aa924a85b470f02d348182 (diff)
downloadphp-shirabe-f375673ef91a67777419eec909470c69e3f88a9b.tar.gz
php-shirabe-f375673ef91a67777419eec909470c69e3f88a9b.tar.zst
php-shirabe-f375673ef91a67777419eec909470c69e3f88a9b.zip
test(package): port VersionParserTest
Both testParseNameVersionPairs (lookbehind/lookahead pattern unsupported by the regex crate) and testIsUpgrade (reaches a todo!() in the php-shim) are marked #[ignore]. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/package/version')
-rw-r--r--crates/shirabe/tests/package/version/mod.rs1
-rw-r--r--crates/shirabe/tests/package/version/version_parser_test.rs86
2 files changed, 87 insertions, 0 deletions
diff --git a/crates/shirabe/tests/package/version/mod.rs b/crates/shirabe/tests/package/version/mod.rs
new file mode 100644
index 0000000..e0afb86
--- /dev/null
+++ b/crates/shirabe/tests/package/version/mod.rs
@@ -0,0 +1 @@
+mod version_parser_test;
diff --git a/crates/shirabe/tests/package/version/version_parser_test.rs b/crates/shirabe/tests/package/version/version_parser_test.rs
index b8a7a81..cddb382 100644
--- a/crates/shirabe/tests/package/version/version_parser_test.rs
+++ b/crates/shirabe/tests/package/version/version_parser_test.rs
@@ -1 +1,87 @@
//! ref: composer/tests/Composer/Test/Package/Version/VersionParserTest.php
+
+use indexmap::IndexMap;
+use shirabe::package::version::version_parser::VersionParser;
+
+fn pairs(items: &[&str]) -> Vec<String> {
+ items.iter().map(|s| s.to_string()).collect()
+}
+
+fn entry(fields: &[(&str, &str)]) -> IndexMap<String, String> {
+ fields
+ .iter()
+ .map(|(k, v)| (k.to_string(), v.to_string()))
+ .collect()
+}
+
+#[test]
+#[ignore = "parseNameVersionPairs uses a lookbehind/lookahead pattern the regex crate cannot compile"]
+fn test_parse_name_version_pairs() {
+ for (input, result) in provide_parse_name_version_pairs_data() {
+ let version_parser = VersionParser::new();
+
+ assert_eq!(result, version_parser.parse_name_version_pairs(input).unwrap());
+ }
+}
+
+fn provide_parse_name_version_pairs_data() -> Vec<(Vec<String>, Vec<IndexMap<String, String>>)> {
+ vec![
+ (
+ pairs(&["php:^7.0"]),
+ vec![entry(&[("name", "php"), ("version", "^7.0")])],
+ ),
+ (
+ pairs(&["php", "^7.0"]),
+ vec![entry(&[("name", "php"), ("version", "^7.0")])],
+ ),
+ (
+ pairs(&["php", "ext-apcu"]),
+ vec![entry(&[("name", "php")]), entry(&[("name", "ext-apcu")])],
+ ),
+ (
+ pairs(&["foo/*", "bar*", "acme/baz", "*@dev"]),
+ vec![
+ entry(&[("name", "foo/*")]),
+ entry(&[("name", "bar*")]),
+ entry(&[("name", "acme/baz"), ("version", "*@dev")]),
+ ],
+ ),
+ (
+ pairs(&["php", "*"]),
+ vec![entry(&[("name", "php"), ("version", "*")])],
+ ),
+ ]
+}
+
+#[test]
+#[ignore = "VersionParser::is_upgrade reaches a todo!() in the php-shim"]
+fn test_is_upgrade() {
+ for (from, to, expected) in provide_is_upgrade_tests() {
+ assert_eq!(expected, VersionParser::is_upgrade(&from, &to).unwrap());
+ }
+}
+
+fn provide_is_upgrade_tests() -> Vec<(String, String, bool)> {
+ vec![
+ ("0.9.0.0".to_string(), "1.0.0.0".to_string(), true),
+ ("1.0.0.0".to_string(), "0.9.0.0".to_string(), false),
+ (
+ "1.0.0.0".to_string(),
+ VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
+ true,
+ ),
+ (
+ VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
+ VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
+ true,
+ ),
+ (
+ VersionParser::DEFAULT_BRANCH_ALIAS.to_string(),
+ "1.0.0.0".to_string(),
+ false,
+ ),
+ ("1.0.0.0".to_string(), "dev-foo".to_string(), true),
+ ("dev-foo".to_string(), "dev-foo".to_string(), true),
+ ("dev-foo".to_string(), "1.0.0.0".to_string(), true),
+ ]
+}