From c3fe731783ef681e62026e723ed44f58810d404f Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 21 Jun 2026 04:03:39 +0900 Subject: test(dependency-resolver): port RuleTest equals/type/enable/disable/isAssertion pass; getHash reaches hash_raw (todo!()) and prettyString needs mocked RepositorySet/Request, so both are stubbed. Co-Authored-By: Claude Opus 4.8 (1M context) --- crates/shirabe/tests/dependency_resolver/main.rs | 1 + .../shirabe/tests/dependency_resolver/rule_test.rs | 91 ++++++++++++++++++++++ 2 files changed, 92 insertions(+) (limited to 'crates') diff --git a/crates/shirabe/tests/dependency_resolver/main.rs b/crates/shirabe/tests/dependency_resolver/main.rs index e9b2259..d81ab0c 100644 --- a/crates/shirabe/tests/dependency_resolver/main.rs +++ b/crates/shirabe/tests/dependency_resolver/main.rs @@ -4,3 +4,4 @@ mod test_case; mod pool_test; mod request_test; mod rule_set_iterator_test; +mod rule_test; diff --git a/crates/shirabe/tests/dependency_resolver/rule_test.rs b/crates/shirabe/tests/dependency_resolver/rule_test.rs index 69d4816..31c525f 100644 --- a/crates/shirabe/tests/dependency_resolver/rule_test.rs +++ b/crates/shirabe/tests/dependency_resolver/rule_test.rs @@ -1 +1,92 @@ //! ref: composer/tests/Composer/Test/DependencyResolver/RuleTest.php + +use shirabe::dependency_resolver::{ + GenericRule, RULE_ROOT_REQUIRE, ReasonData, Rule, RuleSet, +}; +use shirabe_semver::constraint::MatchAllConstraint; + +fn root_require_reason() -> ReasonData { + ReasonData::RootRequire { + package_name: String::new(), + constraint: MatchAllConstraint::new(None).into(), + } +} + +fn generic_rule(literals: Vec) -> Rule { + Rule::Generic(GenericRule::new(literals, RULE_ROOT_REQUIRE, root_require_reason())) +} + +#[test] +#[ignore = "Rule::get_hash reaches shirabe_php_shim::hash_raw, which is todo!()"] +fn test_get_hash() { + todo!() +} + +#[test] +fn test_equals_for_rules_with_different_hashes() { + let rule = generic_rule(vec![1, 2]); + let rule2 = generic_rule(vec![1, 3]); + + assert!(!rule.equals(&rule2)); +} + +#[test] +fn test_equals_for_rules_with_differ_literals_quantity() { + let rule = generic_rule(vec![1, 12]); + let rule2 = generic_rule(vec![1]); + + assert!(!rule.equals(&rule2)); +} + +#[test] +fn test_equals_for_rules_with_same_literals() { + let rule = generic_rule(vec![1, 12]); + let rule2 = generic_rule(vec![1, 12]); + + assert!(rule.equals(&rule2)); +} + +#[test] +fn test_set_and_get_type() { + let mut rule = generic_rule(vec![]); + rule.set_type(RuleSet::TYPE_REQUEST); + + assert_eq!(RuleSet::TYPE_REQUEST, rule.get_type()); +} + +#[test] +fn test_enable() { + let mut rule = generic_rule(vec![]); + rule.disable().unwrap(); + rule.enable(); + + assert!(rule.is_enabled()); + assert!(!rule.is_disabled()); +} + +#[test] +fn test_disable() { + let mut rule = generic_rule(vec![]); + rule.enable(); + rule.disable().unwrap(); + + assert!(rule.is_disabled()); + assert!(!rule.is_enabled()); +} + +#[test] +fn test_is_assertions() { + let rule = generic_rule(vec![1, 12]); + let rule2 = generic_rule(vec![1]); + + assert!(!rule.is_assertion()); + assert!(rule2.is_assertion()); +} + +// In PHP this mocks RepositorySet and Request and passes a Link reason to build the +// pretty string. The mocked collaborators cannot be reproduced here. +#[test] +#[ignore = "getPrettyString needs mocked RepositorySet and Request; mocking is not available"] +fn test_pretty_string() { + todo!() +} -- cgit v1.3.1