test: test trait behavior in different epochs and clarity versions

This commit is contained in:
Brice Dobry
2022-12-19 19:50:49 -05:00
parent 2c2635f80d
commit 2394e47a64
3 changed files with 143 additions and 116 deletions

View File

@@ -45,6 +45,7 @@ use stacks_common::consts::{CHAIN_ID_MAINNET, CHAIN_ID_TESTNET};
use super::events::StacksTransactionEvent;
pub use super::test_util::*;
use super::ClarityVersion;
mod assets;
mod contracts;
@@ -70,6 +71,25 @@ where
f(&mut owned_env)
}
pub fn with_versioned_memory_environment<F>(
f: F,
epoch: StacksEpochId,
version: ClarityVersion,
top_level: bool,
) where
F: FnOnce(&mut OwnedEnvironment, ClarityVersion) -> (),
{
let mut marf_kv = MemoryBackingStore::new();
let mut owned_env = OwnedEnvironment::new(marf_kv.as_clarity_db(), epoch);
// start an initial transaction.
if !top_level {
owned_env.begin();
}
f(&mut owned_env, version)
}
/// Determine whether or not to use the testnet or mainnet chain ID, given whether or not the
/// caller expects to use mainnet or testnet.
///

View File

@@ -95,14 +95,12 @@ fn test_simple_let(#[case] version: ClarityVersion, #[case] epoch: StacksEpochId
(+ z y))
x))";
let contract_id = QualifiedContractIdentifier::transient();
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity2,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
if let Ok(parsed_program) = parse(&contract_id, &program, version, epoch) {
let context = LocalContext::new();
let mut marf = MemoryBackingStore::new();
let mut env = OwnedEnvironment::new(marf.as_clarity_db(), StacksEpochId::latest());
let mut env = OwnedEnvironment::new(marf.as_clarity_db(), epoch);
assert_eq!(
Ok(Value::Int(7)),

View File

@@ -21,7 +21,9 @@ use crate::vm::ast::ASTRules;
use crate::vm::contexts::{Environment, GlobalContext, OwnedEnvironment};
use crate::vm::errors::{CheckErrors, Error, RuntimeErrorType};
use crate::vm::execute as vm_execute;
use crate::vm::tests::{execute, symbols_from_values, with_memory_environment};
use crate::vm::tests::{
execute, symbols_from_values, with_memory_environment, with_versioned_memory_environment,
};
use crate::vm::types::{
PrincipalData, QualifiedContractIdentifier, ResponseData, TypeSignature, Value,
};
@@ -30,8 +32,15 @@ use std::convert::TryInto;
use crate::vm::version::ClarityVersion;
use crate::vm::ContractContext;
#[test]
fn test_all() {
#[template]
#[rstest]
#[case(ClarityVersion::Clarity1, StacksEpochId::Epoch2_05)]
#[case(ClarityVersion::Clarity1, StacksEpochId::Epoch21)]
#[case(ClarityVersion::Clarity2, StacksEpochId::Epoch21)]
fn test_epoch_clarity_versions(#[case] version: ClarityVersion, #[case] epoch: StacksEpochId) {}
#[apply(test_epoch_clarity_versions)]
fn test_trait_basics(#[case] version: ClarityVersion, #[case] epoch: StacksEpochId) {
let to_test = [
test_dynamic_dispatch_pass_trait_nested_in_let,
test_dynamic_dispatch_pass_trait,
@@ -55,6 +64,15 @@ fn test_all() {
test_return_trait_with_contract_of,
test_return_trait_with_contract_of_wrapped_in_begin,
test_return_trait_with_contract_of_wrapped_in_let,
];
for test in to_test.iter() {
with_versioned_memory_environment(test, epoch, version, false);
}
}
#[test]
fn test_clarity2() {
let to_test = [
test_pass_principal_literal_to_trait,
test_pass_trait_to_subtrait,
test_embedded_trait,
@@ -72,7 +90,10 @@ fn test_all() {
}
}
fn test_dynamic_dispatch_by_defining_trait(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_by_defining_trait(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -80,10 +101,8 @@ fn test_dynamic_dispatch_by_defining_trait(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -123,7 +142,10 @@ fn test_dynamic_dispatch_by_defining_trait(owned_env: &mut OwnedEnvironment) {
}
}
fn test_dynamic_dispatch_pass_trait_nested_in_let(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_pass_trait_nested_in_let(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -134,10 +156,8 @@ fn test_dynamic_dispatch_pass_trait_nested_in_let(owned_env: &mut OwnedEnvironme
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -177,7 +197,7 @@ fn test_dynamic_dispatch_pass_trait_nested_in_let(owned_env: &mut OwnedEnvironme
}
}
fn test_dynamic_dispatch_pass_trait(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_pass_trait(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -187,10 +207,8 @@ fn test_dynamic_dispatch_pass_trait(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -230,7 +248,10 @@ fn test_dynamic_dispatch_pass_trait(owned_env: &mut OwnedEnvironment) {
}
}
fn test_dynamic_dispatch_intra_contract_call(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_intra_contract_call(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
let dispatching_contract = "(use-trait trait-1 .contract-defining-trait.trait-1)
@@ -239,10 +260,8 @@ fn test_dynamic_dispatch_intra_contract_call(owned_env: &mut OwnedEnvironment) {
(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -284,7 +303,10 @@ fn test_dynamic_dispatch_intra_contract_call(owned_env: &mut OwnedEnvironment) {
}
}
fn test_dynamic_dispatch_by_implementing_imported_trait(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_by_implementing_imported_trait(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
let dispatching_contract = "(use-trait trait-1 .contract-defining-trait.trait-1)
@@ -294,10 +316,8 @@ fn test_dynamic_dispatch_by_implementing_imported_trait(owned_env: &mut OwnedEnv
(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -345,6 +365,7 @@ fn test_dynamic_dispatch_by_implementing_imported_trait(owned_env: &mut OwnedEnv
fn test_dynamic_dispatch_by_implementing_imported_trait_mul_funcs(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))
@@ -357,10 +378,8 @@ fn test_dynamic_dispatch_by_implementing_imported_trait_mul_funcs(
(define-public (get-2 (x uint)) (ok u2))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -406,7 +425,10 @@ fn test_dynamic_dispatch_by_implementing_imported_trait_mul_funcs(
}
}
fn test_dynamic_dispatch_by_importing_trait(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_by_importing_trait(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
let dispatching_contract = "(use-trait trait-1 .contract-defining-trait.trait-1)
@@ -415,10 +437,8 @@ fn test_dynamic_dispatch_by_importing_trait(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -464,7 +484,10 @@ fn test_dynamic_dispatch_by_importing_trait(owned_env: &mut OwnedEnvironment) {
}
}
fn test_dynamic_dispatch_including_nested_trait(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_including_nested_trait(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let contract_defining_nested_trait = "(define-trait trait-a (
(get-a (uint) (response uint uint))))";
let contract_defining_trait = "(use-trait trait-a .contract-defining-nested-trait.trait-a)
@@ -480,10 +503,8 @@ fn test_dynamic_dispatch_including_nested_trait(owned_env: &mut OwnedEnvironment
let target_nested_contract = "(define-public (get-a (x uint)) (ok u99))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -544,7 +565,10 @@ fn test_dynamic_dispatch_including_nested_trait(owned_env: &mut OwnedEnvironment
}
}
fn test_dynamic_dispatch_mismatched_args(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_mismatched_args(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -552,10 +576,8 @@ fn test_dynamic_dispatch_mismatched_args(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-public (get-1 (x int)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -597,7 +619,10 @@ fn test_dynamic_dispatch_mismatched_args(owned_env: &mut OwnedEnvironment) {
}
}
fn test_dynamic_dispatch_mismatched_returned(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_mismatched_returned(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -605,10 +630,8 @@ fn test_dynamic_dispatch_mismatched_returned(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-public (get-1 (x uint)) (ok 1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -650,7 +673,7 @@ fn test_dynamic_dispatch_mismatched_returned(owned_env: &mut OwnedEnvironment) {
}
}
fn test_reentrant_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
fn test_reentrant_dynamic_dispatch(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -661,10 +684,8 @@ fn test_reentrant_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
"(define-public (get-1 (x uint)) (contract-call? .dispatching-contract wrapped-get-1 .target-contract))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -706,7 +727,7 @@ fn test_reentrant_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
}
}
fn test_readwrite_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
fn test_readwrite_dynamic_dispatch(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-read-only (wrapped-get-1 (contract <trait-1>))
@@ -714,10 +735,8 @@ fn test_readwrite_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-read-only (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -759,7 +778,10 @@ fn test_readwrite_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
}
}
fn test_readwrite_violation_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
fn test_readwrite_violation_dynamic_dispatch(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-read-only (wrapped-get-1 (contract <trait-1>))
@@ -767,10 +789,8 @@ fn test_readwrite_violation_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -812,7 +832,7 @@ fn test_readwrite_violation_dynamic_dispatch(owned_env: &mut OwnedEnvironment) {
}
}
fn test_bad_call_with_trait(owned_env: &mut OwnedEnvironment) {
fn test_bad_call_with_trait(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
// This set of contracts should be working in this context,
// the analysis is not being performed.
let contract_defining_trait = "(define-trait trait-1 (
@@ -827,10 +847,8 @@ fn test_bad_call_with_trait(owned_env: &mut OwnedEnvironment) {
(contract-call? .dispatch wrapped-get-1 contract))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -879,7 +897,7 @@ fn test_bad_call_with_trait(owned_env: &mut OwnedEnvironment) {
}
}
fn test_good_call_with_trait(owned_env: &mut OwnedEnvironment) {
fn test_good_call_with_trait(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
let dispatching_contract = "(use-trait trait-1 .defun.trait-1)
@@ -891,10 +909,8 @@ fn test_good_call_with_trait(owned_env: &mut OwnedEnvironment) {
(contract-call? .dispatch wrapped-get-1 .implem))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -943,7 +959,7 @@ fn test_good_call_with_trait(owned_env: &mut OwnedEnvironment) {
}
}
fn test_good_call_2_with_trait(owned_env: &mut OwnedEnvironment) {
fn test_good_call_2_with_trait(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
let dispatching_contract = "(use-trait trait-1 .defun.trait-1)
@@ -956,10 +972,8 @@ fn test_good_call_2_with_trait(owned_env: &mut OwnedEnvironment) {
(contract-call? .dispatch wrapped-get-1 contract))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -1014,6 +1028,7 @@ fn test_good_call_2_with_trait(owned_env: &mut OwnedEnvironment) {
fn test_dynamic_dispatch_pass_literal_principal_as_trait_in_user_defined_functions(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
@@ -1025,10 +1040,8 @@ fn test_dynamic_dispatch_pass_literal_principal_as_trait_in_user_defined_functio
(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -1074,7 +1087,7 @@ fn test_dynamic_dispatch_pass_literal_principal_as_trait_in_user_defined_functio
}
}
fn test_contract_of_value(owned_env: &mut OwnedEnvironment) {
fn test_contract_of_value(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
let dispatching_contract = "(use-trait trait-1 .defun.trait-1)
@@ -1084,10 +1097,8 @@ fn test_contract_of_value(owned_env: &mut OwnedEnvironment) {
(define-public (get-1 (x uint)) (ok u99))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -1135,7 +1146,7 @@ fn test_contract_of_value(owned_env: &mut OwnedEnvironment) {
}
}
fn test_contract_of_no_impl(owned_env: &mut OwnedEnvironment) {
fn test_contract_of_no_impl(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let contract_defining_trait = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))";
let dispatching_contract = "(use-trait trait-1 .defun.trait-1)
@@ -1147,10 +1158,8 @@ fn test_contract_of_no_impl(owned_env: &mut OwnedEnvironment) {
(define-public (get-1 (x uint)) (ok u99))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -1198,7 +1207,10 @@ fn test_contract_of_no_impl(owned_env: &mut OwnedEnvironment) {
}
}
fn test_return_trait_with_contract_of_wrapped_in_begin(owned_env: &mut OwnedEnvironment) {
fn test_return_trait_with_contract_of_wrapped_in_begin(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -1208,10 +1220,8 @@ fn test_return_trait_with_contract_of_wrapped_in_begin(owned_env: &mut OwnedEnvi
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -1251,7 +1261,10 @@ fn test_return_trait_with_contract_of_wrapped_in_begin(owned_env: &mut OwnedEnvi
}
}
fn test_return_trait_with_contract_of_wrapped_in_let(owned_env: &mut OwnedEnvironment) {
fn test_return_trait_with_contract_of_wrapped_in_let(
owned_env: &mut OwnedEnvironment,
version: ClarityVersion,
) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -1261,10 +1274,8 @@ fn test_return_trait_with_contract_of_wrapped_in_let(owned_env: &mut OwnedEnviro
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);
@@ -1304,7 +1315,7 @@ fn test_return_trait_with_contract_of_wrapped_in_let(owned_env: &mut OwnedEnviro
}
}
fn test_return_trait_with_contract_of(owned_env: &mut OwnedEnvironment) {
fn test_return_trait_with_contract_of(owned_env: &mut OwnedEnvironment, version: ClarityVersion) {
let dispatching_contract = "(define-trait trait-1 (
(get-1 (uint) (response uint uint))))
(define-public (wrapped-get-1 (contract <trait-1>))
@@ -1312,10 +1323,8 @@ fn test_return_trait_with_contract_of(owned_env: &mut OwnedEnvironment) {
let target_contract = "(define-public (get-1 (x uint)) (ok u1))";
let p1 = execute("'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR");
let mut placeholder_context = ContractContext::new(
QualifiedContractIdentifier::transient(),
ClarityVersion::Clarity1,
);
let mut placeholder_context =
ContractContext::new(QualifiedContractIdentifier::transient(), version);
{
let mut env = owned_env.get_exec_environment(None, None, &mut placeholder_context);