aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/tests/dependency_resolver
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 01:05:18 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 01:05:18 +0900
commita6eec8ceb2f2f400fea28193fb1608b4bc968016 (patch)
tree5f3faa7015a85b2a2aab15f339d41a11b5b6a84c /crates/shirabe/tests/dependency_resolver
parentf50020461ec2ca005f11538e944e456b5a37c681 (diff)
downloadphp-shirabe-a6eec8ceb2f2f400fea28193fb1608b4bc968016.tar.gz
php-shirabe-a6eec8ceb2f2f400fea28193fb1608b4bc968016.tar.zst
php-shirabe-a6eec8ceb2f2f400fea28193fb1608b4bc968016.zip
test(dependency-resolver): port RuleSetIteratorTest
Both testForeach and testKeys pass. The PHP foreach over the Iterator is reproduced with the ported valid()/current()/key()/next() methods; the original assertEquals on rule objects is checked via Rc::ptr_eq since the iterator yields the same Rc instances. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/tests/dependency_resolver')
-rw-r--r--crates/shirabe/tests/dependency_resolver/main.rs1
-rw-r--r--crates/shirabe/tests/dependency_resolver/rule_set_iterator_test.rs85
2 files changed, 86 insertions, 0 deletions
diff --git a/crates/shirabe/tests/dependency_resolver/main.rs b/crates/shirabe/tests/dependency_resolver/main.rs
index 35fba9a..f6624a1 100644
--- a/crates/shirabe/tests/dependency_resolver/main.rs
+++ b/crates/shirabe/tests/dependency_resolver/main.rs
@@ -1 +1,2 @@
mod request_test;
+mod rule_set_iterator_test;
diff --git a/crates/shirabe/tests/dependency_resolver/rule_set_iterator_test.rs b/crates/shirabe/tests/dependency_resolver/rule_set_iterator_test.rs
index 73cff8e..d654dd7 100644
--- a/crates/shirabe/tests/dependency_resolver/rule_set_iterator_test.rs
+++ b/crates/shirabe/tests/dependency_resolver/rule_set_iterator_test.rs
@@ -1 +1,86 @@
//! ref: composer/tests/Composer/Test/DependencyResolver/RuleSetIteratorTest.php
+
+use std::cell::RefCell;
+use std::rc::Rc;
+
+use indexmap::IndexMap;
+use shirabe::dependency_resolver::generic_rule::GenericRule;
+use shirabe::dependency_resolver::rule::{RULE_LEARNED, RULE_ROOT_REQUIRE, ReasonData, Rule};
+use shirabe::dependency_resolver::rule_set::RuleSet;
+use shirabe::dependency_resolver::rule_set_iterator::RuleSetIterator;
+use shirabe_semver::constraint::MatchAllConstraint;
+
+type Rules = IndexMap<i64, Vec<Rc<RefCell<Rule>>>>;
+
+fn root_require_rule() -> Rc<RefCell<Rule>> {
+ Rc::new(RefCell::new(Rule::Generic(GenericRule::new(
+ vec![],
+ RULE_ROOT_REQUIRE,
+ ReasonData::RootRequire {
+ package_name: String::new(),
+ constraint: MatchAllConstraint::new(None).into(),
+ },
+ ))))
+}
+
+// Mirrors the original setUp().
+fn make_rules() -> Rules {
+ let mut rules: Rules = IndexMap::new();
+ rules.insert(
+ RuleSet::TYPE_REQUEST,
+ vec![root_require_rule(), root_require_rule()],
+ );
+ rules.insert(
+ RuleSet::TYPE_LEARNED,
+ vec![Rc::new(RefCell::new(Rule::Generic(GenericRule::new(
+ vec![],
+ RULE_LEARNED,
+ ReasonData::Int(1),
+ ))))],
+ );
+ rules.insert(RuleSet::TYPE_PACKAGE, vec![]);
+ rules
+}
+
+#[test]
+fn test_foreach() {
+ let rules = make_rules();
+ let mut rule_set_iterator = RuleSetIterator::new(rules.clone());
+
+ let mut result: Vec<Rc<RefCell<Rule>>> = Vec::new();
+ while rule_set_iterator.valid() {
+ result.push(rule_set_iterator.current());
+ rule_set_iterator.next();
+ }
+
+ let expected = vec![
+ rules[&RuleSet::TYPE_REQUEST][0].clone(),
+ rules[&RuleSet::TYPE_REQUEST][1].clone(),
+ rules[&RuleSet::TYPE_LEARNED][0].clone(),
+ ];
+
+ assert_eq!(expected.len(), result.len());
+ for (e, r) in expected.iter().zip(result.iter()) {
+ assert!(Rc::ptr_eq(e, r));
+ }
+}
+
+#[test]
+fn test_keys() {
+ let rules = make_rules();
+ let mut rule_set_iterator = RuleSetIterator::new(rules);
+
+ let mut result: Vec<i64> = Vec::new();
+ while rule_set_iterator.valid() {
+ result.push(rule_set_iterator.key());
+ rule_set_iterator.next();
+ }
+
+ let expected = vec![
+ RuleSet::TYPE_REQUEST,
+ RuleSet::TYPE_REQUEST,
+ RuleSet::TYPE_LEARNED,
+ ];
+
+ assert_eq!(expected, result);
+}