From 64effd0e6f49f0c935af2a7790b230e46d46d4f8 Mon Sep 17 00:00:00 2001
From: PG Herveou <pgherveou@gmail.com>
Date: Fri, 10 Nov 2023 12:22:47 +0100
Subject: [PATCH] Contracts move fixtures to new crate (#2246)

Small PR that introduce a new crate that will host RISC-V & wasm
fixtures for testing pallet-contracts
---
 Cargo.lock                                    | 10 +++++
 Cargo.toml                                    |  1 +
 substrate/frame/contracts/Cargo.toml          |  2 +
 substrate/frame/contracts/fixtures/Cargo.toml | 18 ++++++++
 .../account_reentrance_count_call.wat         |  0
 .../add_remove_delegate_dependency.wat        |  0
 .../contracts/fixtures/{ => data}/balance.wat |  0
 .../contracts/fixtures/{ => data}/call.wat    |  0
 .../fixtures/{ => data}/call_return_code.wat  |  0
 .../fixtures/{ => data}/call_runtime.wat      |  0
 .../{ => data}/call_runtime_and_call.wat      |  0
 .../fixtures/{ => data}/call_with_limit.wat   |  0
 .../fixtures/{ => data}/caller_contract.wat   |  0
 .../fixtures/{ => data}/chain_extension.wat   |  0
 .../chain_extension_temp_storage.wat          |  0
 .../{ => data}/create_storage_and_call.wat    |  0
 .../create_storage_and_instantiate.wat        |  0
 .../fixtures/{ => data}/crypto_hashes.wat     |  0
 .../{ => data}/debug_message_invalid_utf8.wat |  0
 .../debug_message_logging_disabled.wat        |  0
 .../{ => data}/debug_message_works.wat        |  0
 .../fixtures/{ => data}/delegate_call.wat     |  0
 .../fixtures/{ => data}/delegate_call_lib.wat |  0
 .../{ => data}/delegate_call_simple.wat       |  0
 .../{ => data}/destroy_and_transfer.wat       |  0
 .../contracts/fixtures/{ => data}/drain.wat   |  0
 .../contracts/fixtures/{ => data}/dummy.wat   |  0
 .../fixtures/{ => data}/ecdsa_recover.wat     |  0
 .../{ => data}/event_and_return_on_deploy.wat |  0
 .../fixtures/{ => data}/event_size.wat        |  0
 .../fixtures/{ => data}/float_instruction.wat |  0
 .../{ => data}/instantiate_return_code.wat    |  0
 .../{ => data}/invalid_contract_no_call.wat   |  0
 .../{ => data}/invalid_contract_no_memory.wat |  0
 .../fixtures/{ => data}/invalid_module.wat    |  0
 .../fixtures/{ => data}/multi_store.wat       |  0
 .../{ => data}/new_set_code_hash_contract.wat |  0
 .../fixtures/{ => data}/ok_trap_revert.wat    |  0
 .../{ => data}/reentrance_count_call.wat      |  0
 .../reentrance_count_delegated_call.wat       |  0
 .../fixtures/{ => data}/return_with_data.wat  |  0
 .../fixtures/{ => data}/run_out_of_gas.wat    |  0
 .../{ => data}/run_out_of_gas_start_fn.wat    |  0
 .../fixtures/{ => data}/seal_input_noop.wat   |  0
 .../fixtures/{ => data}/seal_input_once.wat   |  0
 .../fixtures/{ => data}/seal_input_twice.wat  |  0
 .../fixtures/{ => data}/self_destruct.wat     |  0
 .../self_destructing_constructor.wat          |  0
 .../fixtures/{ => data}/set_code_hash.wat     |  0
 .../fixtures/{ => data}/set_empty_storage.wat |  0
 .../fixtures/{ => data}/sr25519_verify.wat    |  0
 .../fixtures/{ => data}/storage_size.wat      |  0
 .../fixtures/{ => data}/store_call.wat        |  0
 .../fixtures/{ => data}/store_deploy.wat      |  0
 .../{ => data}/transfer_return_code.wat       |  0
 substrate/frame/contracts/fixtures/src/lib.rs | 42 +++++++++++++++++++
 substrate/frame/contracts/src/tests.rs        | 24 +----------
 57 files changed, 74 insertions(+), 23 deletions(-)
 create mode 100644 substrate/frame/contracts/fixtures/Cargo.toml
 rename substrate/frame/contracts/fixtures/{ => data}/account_reentrance_count_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/add_remove_delegate_dependency.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/balance.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/call_return_code.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/call_runtime.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/call_runtime_and_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/call_with_limit.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/caller_contract.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/chain_extension.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/chain_extension_temp_storage.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/create_storage_and_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/create_storage_and_instantiate.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/crypto_hashes.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/debug_message_invalid_utf8.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/debug_message_logging_disabled.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/debug_message_works.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/delegate_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/delegate_call_lib.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/delegate_call_simple.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/destroy_and_transfer.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/drain.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/dummy.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/ecdsa_recover.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/event_and_return_on_deploy.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/event_size.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/float_instruction.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/instantiate_return_code.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/invalid_contract_no_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/invalid_contract_no_memory.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/invalid_module.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/multi_store.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/new_set_code_hash_contract.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/ok_trap_revert.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/reentrance_count_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/reentrance_count_delegated_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/return_with_data.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/run_out_of_gas.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/run_out_of_gas_start_fn.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/seal_input_noop.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/seal_input_once.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/seal_input_twice.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/self_destruct.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/self_destructing_constructor.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/set_code_hash.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/set_empty_storage.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/sr25519_verify.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/storage_size.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/store_call.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/store_deploy.wat (100%)
 rename substrate/frame/contracts/fixtures/{ => data}/transfer_return_code.wat (100%)
 create mode 100644 substrate/frame/contracts/fixtures/src/lib.rs

diff --git a/Cargo.lock b/Cargo.lock
index 5c1bc13b72f..2a091ce6817 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -9701,6 +9701,7 @@ dependencies = [
  "impl-trait-for-tuples",
  "log",
  "pallet-balances",
+ "pallet-contracts-fixtures",
  "pallet-contracts-primitives",
  "pallet-contracts-proc-macro",
  "pallet-insecure-randomness-collective-flip",
@@ -9725,6 +9726,15 @@ dependencies = [
  "wat",
 ]
 
+[[package]]
+name = "pallet-contracts-fixtures"
+version = "1.0.0"
+dependencies = [
+ "frame-system",
+ "sp-runtime",
+ "wat",
+]
+
 [[package]]
 name = "pallet-contracts-primitives"
 version = "24.0.0"
diff --git a/Cargo.toml b/Cargo.toml
index 3b3469e5483..42bbac37a6c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -293,6 +293,7 @@ members = [
 	"substrate/frame/child-bounties",
 	"substrate/frame/collective",
 	"substrate/frame/contracts",
+	"substrate/frame/contracts/fixtures",
 	"substrate/frame/contracts/primitives",
 	"substrate/frame/contracts/proc-macro",
 	"substrate/frame/conviction-voting",
diff --git a/substrate/frame/contracts/Cargo.toml b/substrate/frame/contracts/Cargo.toml
index d80577f9d44..0eb50c2b0ba 100644
--- a/substrate/frame/contracts/Cargo.toml
+++ b/substrate/frame/contracts/Cargo.toml
@@ -54,6 +54,7 @@ assert_matches = "1"
 env_logger = "0.9"
 pretty_assertions = "1"
 wat = "1"
+pallet-contracts-fixtures = { path = "./fixtures" }
 
 # Substrate Dependencies
 pallet-balances = { path = "../balances" }
@@ -73,6 +74,7 @@ std = [
 	"frame-system/std",
 	"log/std",
 	"pallet-balances?/std",
+	"pallet-contracts-fixtures/std",
 	"pallet-contracts-primitives/std",
 	"pallet-contracts-proc-macro/full",
 	"pallet-insecure-randomness-collective-flip/std",
diff --git a/substrate/frame/contracts/fixtures/Cargo.toml b/substrate/frame/contracts/fixtures/Cargo.toml
new file mode 100644
index 00000000000..b44f36f2a5f
--- /dev/null
+++ b/substrate/frame/contracts/fixtures/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "pallet-contracts-fixtures"
+publish = false
+version = "1.0.0"
+authors.workspace = true
+edition.workspace = true
+license.workspace = true
+description = "Fixtures for testing contracts pallet."
+
+[dependencies]
+wat = "1"
+frame-system = { path = "../../system", default-features = false}
+sp-runtime = { path = "../../../primitives/runtime", default-features = false}
+
+[features]
+default = [ "std" ]
+std = [ "frame-system/std", "sp-runtime/std" ]
+
diff --git a/substrate/frame/contracts/fixtures/account_reentrance_count_call.wat b/substrate/frame/contracts/fixtures/data/account_reentrance_count_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/account_reentrance_count_call.wat
rename to substrate/frame/contracts/fixtures/data/account_reentrance_count_call.wat
diff --git a/substrate/frame/contracts/fixtures/add_remove_delegate_dependency.wat b/substrate/frame/contracts/fixtures/data/add_remove_delegate_dependency.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/add_remove_delegate_dependency.wat
rename to substrate/frame/contracts/fixtures/data/add_remove_delegate_dependency.wat
diff --git a/substrate/frame/contracts/fixtures/balance.wat b/substrate/frame/contracts/fixtures/data/balance.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/balance.wat
rename to substrate/frame/contracts/fixtures/data/balance.wat
diff --git a/substrate/frame/contracts/fixtures/call.wat b/substrate/frame/contracts/fixtures/data/call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/call.wat
rename to substrate/frame/contracts/fixtures/data/call.wat
diff --git a/substrate/frame/contracts/fixtures/call_return_code.wat b/substrate/frame/contracts/fixtures/data/call_return_code.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/call_return_code.wat
rename to substrate/frame/contracts/fixtures/data/call_return_code.wat
diff --git a/substrate/frame/contracts/fixtures/call_runtime.wat b/substrate/frame/contracts/fixtures/data/call_runtime.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/call_runtime.wat
rename to substrate/frame/contracts/fixtures/data/call_runtime.wat
diff --git a/substrate/frame/contracts/fixtures/call_runtime_and_call.wat b/substrate/frame/contracts/fixtures/data/call_runtime_and_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/call_runtime_and_call.wat
rename to substrate/frame/contracts/fixtures/data/call_runtime_and_call.wat
diff --git a/substrate/frame/contracts/fixtures/call_with_limit.wat b/substrate/frame/contracts/fixtures/data/call_with_limit.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/call_with_limit.wat
rename to substrate/frame/contracts/fixtures/data/call_with_limit.wat
diff --git a/substrate/frame/contracts/fixtures/caller_contract.wat b/substrate/frame/contracts/fixtures/data/caller_contract.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/caller_contract.wat
rename to substrate/frame/contracts/fixtures/data/caller_contract.wat
diff --git a/substrate/frame/contracts/fixtures/chain_extension.wat b/substrate/frame/contracts/fixtures/data/chain_extension.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/chain_extension.wat
rename to substrate/frame/contracts/fixtures/data/chain_extension.wat
diff --git a/substrate/frame/contracts/fixtures/chain_extension_temp_storage.wat b/substrate/frame/contracts/fixtures/data/chain_extension_temp_storage.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/chain_extension_temp_storage.wat
rename to substrate/frame/contracts/fixtures/data/chain_extension_temp_storage.wat
diff --git a/substrate/frame/contracts/fixtures/create_storage_and_call.wat b/substrate/frame/contracts/fixtures/data/create_storage_and_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/create_storage_and_call.wat
rename to substrate/frame/contracts/fixtures/data/create_storage_and_call.wat
diff --git a/substrate/frame/contracts/fixtures/create_storage_and_instantiate.wat b/substrate/frame/contracts/fixtures/data/create_storage_and_instantiate.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/create_storage_and_instantiate.wat
rename to substrate/frame/contracts/fixtures/data/create_storage_and_instantiate.wat
diff --git a/substrate/frame/contracts/fixtures/crypto_hashes.wat b/substrate/frame/contracts/fixtures/data/crypto_hashes.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/crypto_hashes.wat
rename to substrate/frame/contracts/fixtures/data/crypto_hashes.wat
diff --git a/substrate/frame/contracts/fixtures/debug_message_invalid_utf8.wat b/substrate/frame/contracts/fixtures/data/debug_message_invalid_utf8.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/debug_message_invalid_utf8.wat
rename to substrate/frame/contracts/fixtures/data/debug_message_invalid_utf8.wat
diff --git a/substrate/frame/contracts/fixtures/debug_message_logging_disabled.wat b/substrate/frame/contracts/fixtures/data/debug_message_logging_disabled.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/debug_message_logging_disabled.wat
rename to substrate/frame/contracts/fixtures/data/debug_message_logging_disabled.wat
diff --git a/substrate/frame/contracts/fixtures/debug_message_works.wat b/substrate/frame/contracts/fixtures/data/debug_message_works.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/debug_message_works.wat
rename to substrate/frame/contracts/fixtures/data/debug_message_works.wat
diff --git a/substrate/frame/contracts/fixtures/delegate_call.wat b/substrate/frame/contracts/fixtures/data/delegate_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/delegate_call.wat
rename to substrate/frame/contracts/fixtures/data/delegate_call.wat
diff --git a/substrate/frame/contracts/fixtures/delegate_call_lib.wat b/substrate/frame/contracts/fixtures/data/delegate_call_lib.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/delegate_call_lib.wat
rename to substrate/frame/contracts/fixtures/data/delegate_call_lib.wat
diff --git a/substrate/frame/contracts/fixtures/delegate_call_simple.wat b/substrate/frame/contracts/fixtures/data/delegate_call_simple.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/delegate_call_simple.wat
rename to substrate/frame/contracts/fixtures/data/delegate_call_simple.wat
diff --git a/substrate/frame/contracts/fixtures/destroy_and_transfer.wat b/substrate/frame/contracts/fixtures/data/destroy_and_transfer.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/destroy_and_transfer.wat
rename to substrate/frame/contracts/fixtures/data/destroy_and_transfer.wat
diff --git a/substrate/frame/contracts/fixtures/drain.wat b/substrate/frame/contracts/fixtures/data/drain.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/drain.wat
rename to substrate/frame/contracts/fixtures/data/drain.wat
diff --git a/substrate/frame/contracts/fixtures/dummy.wat b/substrate/frame/contracts/fixtures/data/dummy.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/dummy.wat
rename to substrate/frame/contracts/fixtures/data/dummy.wat
diff --git a/substrate/frame/contracts/fixtures/ecdsa_recover.wat b/substrate/frame/contracts/fixtures/data/ecdsa_recover.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/ecdsa_recover.wat
rename to substrate/frame/contracts/fixtures/data/ecdsa_recover.wat
diff --git a/substrate/frame/contracts/fixtures/event_and_return_on_deploy.wat b/substrate/frame/contracts/fixtures/data/event_and_return_on_deploy.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/event_and_return_on_deploy.wat
rename to substrate/frame/contracts/fixtures/data/event_and_return_on_deploy.wat
diff --git a/substrate/frame/contracts/fixtures/event_size.wat b/substrate/frame/contracts/fixtures/data/event_size.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/event_size.wat
rename to substrate/frame/contracts/fixtures/data/event_size.wat
diff --git a/substrate/frame/contracts/fixtures/float_instruction.wat b/substrate/frame/contracts/fixtures/data/float_instruction.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/float_instruction.wat
rename to substrate/frame/contracts/fixtures/data/float_instruction.wat
diff --git a/substrate/frame/contracts/fixtures/instantiate_return_code.wat b/substrate/frame/contracts/fixtures/data/instantiate_return_code.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/instantiate_return_code.wat
rename to substrate/frame/contracts/fixtures/data/instantiate_return_code.wat
diff --git a/substrate/frame/contracts/fixtures/invalid_contract_no_call.wat b/substrate/frame/contracts/fixtures/data/invalid_contract_no_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/invalid_contract_no_call.wat
rename to substrate/frame/contracts/fixtures/data/invalid_contract_no_call.wat
diff --git a/substrate/frame/contracts/fixtures/invalid_contract_no_memory.wat b/substrate/frame/contracts/fixtures/data/invalid_contract_no_memory.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/invalid_contract_no_memory.wat
rename to substrate/frame/contracts/fixtures/data/invalid_contract_no_memory.wat
diff --git a/substrate/frame/contracts/fixtures/invalid_module.wat b/substrate/frame/contracts/fixtures/data/invalid_module.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/invalid_module.wat
rename to substrate/frame/contracts/fixtures/data/invalid_module.wat
diff --git a/substrate/frame/contracts/fixtures/multi_store.wat b/substrate/frame/contracts/fixtures/data/multi_store.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/multi_store.wat
rename to substrate/frame/contracts/fixtures/data/multi_store.wat
diff --git a/substrate/frame/contracts/fixtures/new_set_code_hash_contract.wat b/substrate/frame/contracts/fixtures/data/new_set_code_hash_contract.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/new_set_code_hash_contract.wat
rename to substrate/frame/contracts/fixtures/data/new_set_code_hash_contract.wat
diff --git a/substrate/frame/contracts/fixtures/ok_trap_revert.wat b/substrate/frame/contracts/fixtures/data/ok_trap_revert.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/ok_trap_revert.wat
rename to substrate/frame/contracts/fixtures/data/ok_trap_revert.wat
diff --git a/substrate/frame/contracts/fixtures/reentrance_count_call.wat b/substrate/frame/contracts/fixtures/data/reentrance_count_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/reentrance_count_call.wat
rename to substrate/frame/contracts/fixtures/data/reentrance_count_call.wat
diff --git a/substrate/frame/contracts/fixtures/reentrance_count_delegated_call.wat b/substrate/frame/contracts/fixtures/data/reentrance_count_delegated_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/reentrance_count_delegated_call.wat
rename to substrate/frame/contracts/fixtures/data/reentrance_count_delegated_call.wat
diff --git a/substrate/frame/contracts/fixtures/return_with_data.wat b/substrate/frame/contracts/fixtures/data/return_with_data.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/return_with_data.wat
rename to substrate/frame/contracts/fixtures/data/return_with_data.wat
diff --git a/substrate/frame/contracts/fixtures/run_out_of_gas.wat b/substrate/frame/contracts/fixtures/data/run_out_of_gas.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/run_out_of_gas.wat
rename to substrate/frame/contracts/fixtures/data/run_out_of_gas.wat
diff --git a/substrate/frame/contracts/fixtures/run_out_of_gas_start_fn.wat b/substrate/frame/contracts/fixtures/data/run_out_of_gas_start_fn.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/run_out_of_gas_start_fn.wat
rename to substrate/frame/contracts/fixtures/data/run_out_of_gas_start_fn.wat
diff --git a/substrate/frame/contracts/fixtures/seal_input_noop.wat b/substrate/frame/contracts/fixtures/data/seal_input_noop.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/seal_input_noop.wat
rename to substrate/frame/contracts/fixtures/data/seal_input_noop.wat
diff --git a/substrate/frame/contracts/fixtures/seal_input_once.wat b/substrate/frame/contracts/fixtures/data/seal_input_once.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/seal_input_once.wat
rename to substrate/frame/contracts/fixtures/data/seal_input_once.wat
diff --git a/substrate/frame/contracts/fixtures/seal_input_twice.wat b/substrate/frame/contracts/fixtures/data/seal_input_twice.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/seal_input_twice.wat
rename to substrate/frame/contracts/fixtures/data/seal_input_twice.wat
diff --git a/substrate/frame/contracts/fixtures/self_destruct.wat b/substrate/frame/contracts/fixtures/data/self_destruct.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/self_destruct.wat
rename to substrate/frame/contracts/fixtures/data/self_destruct.wat
diff --git a/substrate/frame/contracts/fixtures/self_destructing_constructor.wat b/substrate/frame/contracts/fixtures/data/self_destructing_constructor.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/self_destructing_constructor.wat
rename to substrate/frame/contracts/fixtures/data/self_destructing_constructor.wat
diff --git a/substrate/frame/contracts/fixtures/set_code_hash.wat b/substrate/frame/contracts/fixtures/data/set_code_hash.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/set_code_hash.wat
rename to substrate/frame/contracts/fixtures/data/set_code_hash.wat
diff --git a/substrate/frame/contracts/fixtures/set_empty_storage.wat b/substrate/frame/contracts/fixtures/data/set_empty_storage.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/set_empty_storage.wat
rename to substrate/frame/contracts/fixtures/data/set_empty_storage.wat
diff --git a/substrate/frame/contracts/fixtures/sr25519_verify.wat b/substrate/frame/contracts/fixtures/data/sr25519_verify.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/sr25519_verify.wat
rename to substrate/frame/contracts/fixtures/data/sr25519_verify.wat
diff --git a/substrate/frame/contracts/fixtures/storage_size.wat b/substrate/frame/contracts/fixtures/data/storage_size.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/storage_size.wat
rename to substrate/frame/contracts/fixtures/data/storage_size.wat
diff --git a/substrate/frame/contracts/fixtures/store_call.wat b/substrate/frame/contracts/fixtures/data/store_call.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/store_call.wat
rename to substrate/frame/contracts/fixtures/data/store_call.wat
diff --git a/substrate/frame/contracts/fixtures/store_deploy.wat b/substrate/frame/contracts/fixtures/data/store_deploy.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/store_deploy.wat
rename to substrate/frame/contracts/fixtures/data/store_deploy.wat
diff --git a/substrate/frame/contracts/fixtures/transfer_return_code.wat b/substrate/frame/contracts/fixtures/data/transfer_return_code.wat
similarity index 100%
rename from substrate/frame/contracts/fixtures/transfer_return_code.wat
rename to substrate/frame/contracts/fixtures/data/transfer_return_code.wat
diff --git a/substrate/frame/contracts/fixtures/src/lib.rs b/substrate/frame/contracts/fixtures/src/lib.rs
new file mode 100644
index 00000000000..32f4023e644
--- /dev/null
+++ b/substrate/frame/contracts/fixtures/src/lib.rs
@@ -0,0 +1,42 @@
+// This file is part of Substrate.
+
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use sp_runtime::traits::Hash;
+use std::{env::var, path::PathBuf};
+
+fn fixtures_root_dir() -> PathBuf {
+	match (var("CARGO_MANIFEST_DIR"), var("CARGO_PKG_NAME")) {
+		// When `CARGO_MANIFEST_DIR` is not set, Rust resolves relative paths from the root folder
+		(Err(_), _) => "substrate/frame/contracts/fixtures/data".into(),
+		(Ok(path), Ok(s)) if s == "pallet-contracts" => PathBuf::from(path).join("fixtures/data"),
+		(Ok(_), pkg_name) => panic!("Failed to resolve fixture dir for tests from {pkg_name:?}."),
+	}
+}
+
+/// Load a given wasm module represented by a .wat file and returns a wasm binary contents along
+/// with it's hash.
+///
+/// The fixture files are located under the `fixtures/` directory.
+pub fn compile_module<T>(fixture_name: &str) -> wat::Result<(Vec<u8>, <T::Hashing as Hash>::Output)>
+where
+	T: frame_system::Config,
+{
+	let fixture_path = fixtures_root_dir().join(format!("{fixture_name}.wat"));
+	let wasm_binary = wat::parse_file(fixture_path)?;
+	let code_hash = T::Hashing::hash(&wasm_binary);
+	Ok((wasm_binary, code_hash))
+}
diff --git a/substrate/frame/contracts/src/tests.rs b/substrate/frame/contracts/src/tests.rs
index 3cc5e7cf4a1..e7784b02b74 100644
--- a/substrate/frame/contracts/src/tests.rs
+++ b/substrate/frame/contracts/src/tests.rs
@@ -53,6 +53,7 @@ use frame_support::{
 	weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight},
 };
 use frame_system::{EventRecord, Phase};
+use pallet_contracts_fixtures::compile_module;
 use pallet_contracts_primitives::CodeUploadReturnValue;
 use pretty_assertions::{assert_eq, assert_ne};
 use sp_core::ByteArray;
@@ -555,29 +556,6 @@ impl ExtBuilder {
 	}
 }
 
-/// Load a given wasm module represented by a .wat file and returns a wasm binary contents along
-/// with it's hash.
-///
-/// The fixture files are located under the `fixtures/` directory.
-fn compile_module<T>(fixture_name: &str) -> wat::Result<(Vec<u8>, <T::Hashing as Hash>::Output)>
-where
-	T: frame_system::Config,
-{
-	let fixture_path = [
-		// When `CARGO_MANIFEST_DIR` is not set, Rust resolves relative paths from the root folder
-		std::env::var("CARGO_MANIFEST_DIR")
-			.as_deref()
-			.unwrap_or("substrate/frame/contracts"),
-		"/fixtures/",
-		fixture_name,
-		".wat",
-	]
-	.concat();
-	let wasm_binary = wat::parse_file(fixture_path)?;
-	let code_hash = T::Hashing::hash(&wasm_binary);
-	Ok((wasm_binary, code_hash))
-}
-
 fn initialize_block(number: u64) {
 	System::reset_events();
 	System::initialize(&number, &[0u8; 32].into(), &Default::default());
-- 
GitLab