diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-21 00:54:07 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-21 00:54:07 +0900 |
| commit | f375673ef91a67777419eec909470c69e3f88a9b (patch) | |
| tree | 37c423244f66607e587c97ba813c1ecaf7ad8650 /crates/shirabe/tests/package | |
| parent | c396d54f0302658304aa924a85b470f02d348182 (diff) | |
| download | php-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')
| -rw-r--r-- | crates/shirabe/tests/package/main.rs | 1 | ||||
| -rw-r--r-- | crates/shirabe/tests/package/version/mod.rs | 1 | ||||
| -rw-r--r-- | crates/shirabe/tests/package/version/version_parser_test.rs | 86 |
3 files changed, 88 insertions, 0 deletions
diff --git a/crates/shirabe/tests/package/main.rs b/crates/shirabe/tests/package/main.rs index 64b2cc7..3735b91 100644 --- a/crates/shirabe/tests/package/main.rs +++ b/crates/shirabe/tests/package/main.rs @@ -1 +1,2 @@ mod archiver; +mod version; 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), + ] +} |
