aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/shirabe/tests/dependency_resolver/main.rs1
-rw-r--r--crates/shirabe/tests/dependency_resolver/rule_test.rs91
2 files changed, 92 insertions, 0 deletions
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<i64>) -> 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!()
+}