blob: f2f8f126bb2cd2fe6d6999187390a9913bce1ce7 [file]
// Copyright 2026 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use rule::run;
use starlark::values::list::ListRef;
use testutils::Assert;
use types::{Label, PackageRef, Session};
#[test]
fn test_ctx_super() {
let mut assert = Assert::new_rule_assert();
assert.load_module("//rules:pure.scl");
assert.pass(
r#"
load("//rules:pure.scl", "child_rule", "parent_rule")
parent_rule(
name = "child",
parent_only = "child_parent_val",
)
child_rule(
name = "target",
parent_only = "parent_val",
child_only = "child_val",
)
"#,
);
let context = assert.context();
let label = Label::new(PackageRef::root().to_owned(), "target".to_owned());
let target = context
.session
.get_target(label.as_ref(), context.session.default_toolchain.as_ref());
let session = assert.session();
let res = run(&target, move |t: &testutils::FakeTargetRef| {
testutils::FakeEvalContext::rule_impl(session.clone(), t.clone())
})
.unwrap();
let list = ListRef::from_value(res.value()).unwrap();
let items: Vec<starlark::values::Value<'_>> = list.iter().collect();
assert_eq!(items.len(), 2);
assert_eq!(items[0].to_repr(), r#"ParentInfo(parent = "parent_val")"#);
assert_eq!(items[1].to_repr(), r#"ChildInfo(child = "child_val")"#);
}