1pub mod macros;
6pub mod utils;
7pub mod venv;
8pub mod vyper;
9pub mod vyper_errors;
10
11#[cfg(test)]
12mod test {
13 use self::{vyper::VyperStack, vyper_errors::VyperErrors};
14
15 use super::*;
16 use crate::{
17 utils::Blueprint,
18 vyper::{Evm, Vyper, Vypers},
19 };
20 use std::path::{Path, PathBuf};
21
22 #[test]
23 fn basic() {
24 let path = PathBuf::from("./multisig.vy");
25 let mut vyper_contract = Vyper::new(&path);
26 vyper_contract.compile().unwrap();
27 vyper_contract.gen_abi().unwrap();
28 assert!(vyper_contract.bytecode.unwrap().starts_with("0x"));
29 }
30
31 #[test]
32 fn compile_version() {
33 let path = PathBuf::from("./multisig.vy");
34 let mut vyper_contract = Vyper::new(&path);
35 vyper_contract.compile_ver(&Evm::Shanghai).unwrap();
36 }
37
38 #[test]
39 fn concurrent_compilation_vers() {
40 tokio_test::block_on(async {
41 let path: PathBuf = PathBuf::from("./multisig.vy");
42 let path2: PathBuf = PathBuf::from("./multisig.vy");
43 let path3: PathBuf = PathBuf::from("./multisig.vy");
44 let path4: PathBuf = PathBuf::from("./multisig.vy");
45 let mut vyper_contracts = Vypers::new(vec![path, path2, path3, path4]);
46 vyper_contracts
47 .compile_many_ver(Evm::Shanghai)
48 .await
49 .unwrap();
50 assert!(!vyper_contracts.bytecode.is_none());
51 })
52 }
53
54 #[test]
55 fn concurrent_compilation() {
56 tokio_test::block_on(async {
57 let path: PathBuf = PathBuf::from("./multisig.vy");
58 let path2: PathBuf = PathBuf::from("./multisig.vy");
59 let path3: PathBuf = PathBuf::from("./multisig.vy");
60 let path4: PathBuf = PathBuf::from("./multisig.vy");
61 let mut vyper_contracts = Vypers::new(vec![path, path2, path3, path4]);
62 vyper_contracts.compile_many().await.unwrap();
63 assert!(!vyper_contracts.bytecode.is_none());
64 })
65 }
66
67 #[test]
68 fn interface() {
69 let path = PathBuf::from("./multisig.vy");
70 let vyper_contract = Vyper::new(&path);
71 vyper_contract.interface().unwrap();
72 }
73
74 #[test]
75 fn storage() {
76 let path = PathBuf::from("./multisig.vy");
77 let vyper_contract = Vyper::new(&path);
78 vyper_contract.storage_layout().unwrap();
79 }
80
81 #[test]
82 fn opcodes() {
83 let path = PathBuf::from("./multisig.vy");
84 let vyper_contract = Vyper::new(&path);
85 vyper_contract.opcodes().unwrap();
86 }
87
88 #[test]
89 fn ast() {
90 let path = PathBuf::from("./multisig.vy");
91 let vyper_contract = Vyper::new(&path);
92 vyper_contract.ast().unwrap();
93 }
94
95 #[test]
96 fn bp() {
97 let path = PathBuf::from("./multisig.vy");
98 let mut vyper_contract = Vyper::new(&path);
99 vyper_contract.compile_blueprint().unwrap();
100 }
101
102 #[test]
103 fn exists() {
104 assert_eq!(true, Vyper::exists(&Vyper::new(Path::new("./multisig.vy"))))
105 }
106
107 #[test]
108 fn parse_bp() {
109 let case1 = b"\xFE\x71\x00\x00";
110 let case2 = b"\xFE\x71\x01\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00";
111 let case3 = b"\xFE\x71\x02\x01\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00";
112 {
113 let Blueprint {
114 erc_version,
115 preamble_data,
116 initcode,
117 } = utils::parse_blueprint(case1).unwrap();
118 assert_eq!((0u8, None, vec![0]), (erc_version, preamble_data, initcode));
119 }
120 {
121 let Blueprint {
122 erc_version,
123 preamble_data,
124 initcode,
125 } = utils::parse_blueprint(case2).unwrap();
126 assert_eq!(
127 (0u8, Some(vec![255, 255, 255, 255, 255, 255, 255]), vec![0]),
128 (erc_version, preamble_data, initcode)
129 );
130 }
131 {
132 let Blueprint {
133 erc_version,
134 preamble_data,
135 initcode,
136 } = utils::parse_blueprint(case3).unwrap();
137 assert_eq!(
138 (
139 0u8,
140 Some(vec![
141 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
142 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
143 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
144 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
145 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
146 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
147 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
148 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
149 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
150 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
151 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
152 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
153 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
154 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
155 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
156 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
157 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
158 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
159 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
160 255, 255, 255, 255, 255, 255, 255, 255, 255
161 ]),
162 vec![0]
163 ),
164 (erc_version, preamble_data, initcode)
165 );
166 }
167 }
168 use crate::venv::{Ready, Venv};
169 #[test]
170 fn venv_test() {
171 let mut contract = Venv::default()
172 .init()
173 .unwrap()
174 .ivyper_venv(None)
175 .unwrap()
176 .vyper(Path::new("./multisig.vy"));
177 contract.compile().unwrap();
178 }
179
180 #[test]
181 fn version_detect() {
182 Vyper::get_version(&Vyper::new(Path::new("./multisig.vy"))).unwrap();
183 }
184
185 #[test]
186 fn vyper_macro_test() {
187 let c = vyper!("./multisig.vy");
188 let c_assertion = Vyper::new(Path::new("./multisig.vy"));
189 assert_eq!(c, c_assertion);
190 let c2_assertion = Vypers::from(vec![
191 Vyper::new(Path::new("./multisig.vy")),
192 Vyper::new(Path::new("./multisig.vy")),
193 ]);
194 let c2 = vyper!("./multisig.vy", "./multisig.vy");
195 assert_eq!(c2, c2_assertion);
196 }
197
198 #[test]
199 fn vypers_macro_test() {
200 let vys_assertion = Vypers::new(vec![
201 PathBuf::from("./multisig.vy"),
202 PathBuf::from("./multisig.vy"),
203 ]);
204 let vys = vyper!("./multisig.vy", "./multisig.vy");
205 assert_eq!(vys, vys_assertion);
206 }
207
208 #[test]
209 fn compile_macro_test() -> Result<(), VyperErrors> {
210 let mut contract_assertion = vyper!("./multisig.vy");
211 contract_assertion.compile().unwrap();
212 let contract = compile!("./multisig.vy");
213 assert_eq!(contract, contract_assertion);
214 Ok(())
215 }
216
217 #[tokio::test]
218 async fn compile_mt_macro_test() -> Result<(), VyperErrors> {
219 let mut vys_assertion = vyper!("./multisig.vy", "./multisig.vy");
220 vys_assertion.compile_many().await.unwrap();
221 let vys = compile!("./multisig.vy", "./multisig.vy");
222 assert_eq!(vys, vys_assertion);
223 Ok(())
224 }
225
226 #[test]
227 fn compabijson_macro_test() -> Result<(), VyperErrors> {
228 let c_assertion = compile!("./multisig.vy");
229 let abi = c_assertion.get_abi().unwrap();
230 let c = abi!("./multisig.vy");
231 assert_eq!(c, abi);
232 Ok(())
233 }
234
235 #[test]
236 fn compabijson_mt_macro_test() -> Result<(), VyperErrors> {
237 tokio_test::block_on(async {
238 let vys_assertion = compile!("./multisig.vy", "./multisig.vy");
239 let abis = vys_assertion.get_abi_many().await.unwrap();
240 let vys = abi!("./multisig.vy", "./multisig.vy");
241 assert_eq!(vys, abis);
242 Ok(())
243 })
244 }
245
246 #[test]
247 fn venv_macro_test() -> Result<(), VyperErrors> {
248 let _: Venv<Ready> = venv!();
249 let _: Venv<Ready> = venv!("0.3.10");
250 Ok(())
251 }
252
253 #[test]
254 fn test_stack_mt() -> Result<(), VyperErrors> {
255 let mut stack = [
256 Vyper::new(Path::new("./multsig.vy")),
257 Vyper::new(Path::new("./multsig.vy")),
258 ];
259 let mut contracts = VyperStack(&mut stack);
260 contracts.gen_abi_many()?;
261 contracts.compile_many()?;
262 Ok(())
263 }
264}