Skip to content

Commit beaee9e

Browse files
committed
test: fix test_samples test
1 parent c4438fd commit beaee9e

File tree

1 file changed

+57
-6
lines changed

1 file changed

+57
-6
lines changed

stackslib/src/clarity_cli.rs

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,16 @@ pub fn add_serialized_output(result: &mut serde_json::Value, value: Value) {
992992

993993
/// Returns (process-exit-code, Option<json-output>)
994994
pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_json::Value>) {
995+
invoke_command_with_analysis_db(invoked_by, args, None)
996+
}
997+
998+
/// Returns (process-exit-code, Option<json-output>)
999+
/// Optionally accepts a shared analysis database for contract dependency resolution
1000+
pub fn invoke_command_with_analysis_db(
1001+
invoked_by: &str,
1002+
args: &[String],
1003+
shared_analysis_db: Option<&mut AnalysisDatabase>,
1004+
) -> (i32, Option<serde_json::Value>) {
9951005
if args.is_empty() {
9961006
print_usage(invoked_by);
9971007
return (1, None);
@@ -1649,13 +1659,46 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
16491659
} else {
16501660
None
16511661
};
1652-
let (_, _, analysis_result_and_cost) =
1662+
let (_, _, analysis_result_and_cost) = if let Some(shared_analysis_db) =
1663+
shared_analysis_db
1664+
{
1665+
// Use shared analysis database for contract dependency resolution
16531666
in_block(header_db, marf_kv, |header_db, mut marf| {
16541667
let analysis_result =
16551668
run_analysis(&contract_identifier, &mut ast, &header_db, &mut marf, true);
16561669
match analysis_result {
16571670
Err(e) => (header_db, marf, Err(e)),
1658-
Ok(analysis) => {
1671+
Ok(contract_analysis) => {
1672+
let result_and_cost = with_env_costs(
1673+
mainnet,
1674+
&header_db,
1675+
&mut marf,
1676+
coverage.as_mut(),
1677+
|vm_env| {
1678+
// Use the shared analysis database for contract initialization
1679+
vm_env.initialize_versioned_contract_with_db(
1680+
contract_identifier,
1681+
ClarityVersion::Clarity2,
1682+
&contract_content,
1683+
None,
1684+
ASTRules::PrecheckSize,
1685+
shared_analysis_db,
1686+
)
1687+
},
1688+
);
1689+
let (result, cost) = result_and_cost;
1690+
(header_db, marf, Ok((contract_analysis, (result, cost))))
1691+
}
1692+
}
1693+
})
1694+
} else {
1695+
// Original behavior without shared analysis database
1696+
in_block(header_db, marf_kv, |header_db, mut marf| {
1697+
let analysis_result =
1698+
run_analysis(&contract_identifier, &mut ast, &header_db, &mut marf, true);
1699+
match analysis_result {
1700+
Err(e) => (header_db, marf, Err(e)),
1701+
Ok(contract_analysis) => {
16591702
let result_and_cost = with_env_costs(
16601703
mainnet,
16611704
&header_db,
@@ -1672,10 +1715,11 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
16721715
},
16731716
);
16741717
let (result, cost) = result_and_cost;
1675-
(header_db, marf, Ok((analysis, (result, cost))))
1718+
(header_db, marf, Ok((contract_analysis, (result, cost))))
16761719
}
16771720
}
1678-
});
1721+
})
1722+
};
16791723

16801724
match analysis_result_and_cost {
16811725
Ok((contract_analysis, (Ok((_x, asset_map, events)), cost))) => {
@@ -2028,15 +2072,21 @@ mod test {
20282072
assert_eq!(exit, 0);
20292073
assert!(!result["message"].as_str().unwrap().is_empty());
20302074

2075+
// Create a shared analysis database for contract dependency resolution
2076+
let mut store = MemoryBackingStore::new();
2077+
let mut analysis_db = store.as_analysis_db();
2078+
analysis_db.begin();
2079+
20312080
eprintln!("launch tokens");
2032-
let invoked = invoke_command(
2081+
let invoked = invoke_command_with_analysis_db(
20332082
"test",
20342083
&[
20352084
"launch".to_string(),
20362085
"S1G2081040G2081040G2081040G208105NK8PE5.tokens".to_string(),
20372086
cargo_workspace_as_string("sample/contracts/tokens.clar"),
20382087
db_name.clone(),
20392088
],
2089+
Some(&mut analysis_db),
20402090
);
20412091

20422092
let exit = invoked.0;
@@ -2117,7 +2167,7 @@ mod test {
21172167
assert!(result["assets"] == json!(null));
21182168

21192169
eprintln!("launch names with costs and assets");
2120-
let invoked = invoke_command(
2170+
let invoked = invoke_command_with_analysis_db(
21212171
"test",
21222172
&[
21232173
"launch".to_string(),
@@ -2127,6 +2177,7 @@ mod test {
21272177
"--assets".to_string(),
21282178
db_name.clone(),
21292179
],
2180+
Some(&mut analysis_db),
21302181
);
21312182

21322183
let exit = invoked.0;

0 commit comments

Comments
 (0)