Skip to content

Commit f132e0b

Browse files
test(sema): assert preserved state initializer call
1 parent d9a38e0 commit f132e0b

1 file changed

Lines changed: 33 additions & 1 deletion

File tree

src/sema/tests/mod.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
mod data_account;
66

7-
use crate::sema::ast::{Expression, Parameter, Statement, TryCatch, Type};
7+
use crate::sema::ast::{Expression, ExternalCallAccounts, Parameter, Statement, TryCatch, Type};
88
use crate::sema::yul::ast::InlineAssembly;
99
use crate::{parse_and_resolve, sema::ast, FileResolver, Target};
1010
use solang_parser::pt::Loc;
@@ -628,6 +628,38 @@ fn state_initializer_contract_call_requires_accounts() {
628628

629629
let errors = ns.diagnostics.errors();
630630
assert!(errors.is_empty());
631+
632+
let contract = &ns.contracts[0];
633+
let foo_no = *contract
634+
.functions
635+
.iter()
636+
.find(|function_no| ns.functions[**function_no].name == "foo")
637+
.unwrap();
638+
639+
let initializer = contract.variables[0].initializer.as_ref().unwrap();
640+
641+
match initializer {
642+
Expression::ExternalFunctionCall {
643+
returns,
644+
function,
645+
args,
646+
call_args,
647+
..
648+
} => {
649+
assert_eq!(returns, &vec![Type::Uint(256)]);
650+
assert!(args.is_empty());
651+
assert!(matches!(
652+
call_args.accounts,
653+
ExternalCallAccounts::AbsentArgument
654+
));
655+
656+
assert!(matches!(
657+
function.as_ref(),
658+
Expression::ExternalFunction { function_no, .. } if *function_no == foo_no
659+
));
660+
}
661+
_ => panic!("unexpected initializer expression: {initializer:?}"),
662+
}
631663
}
632664

633665
#[test]

0 commit comments

Comments
 (0)