mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-04-22 07:57:57 +00:00
bd4e108bb0
- Factor the YUL crate out of `revive-solidity`. - `revive-solidity` is in reality not a Solidity implementation but the revive solidity compiler driver (`resolc`). By renaming we not only get this straight but also a binary with the same name as the crate which should be less confusing. --------- Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
91 lines
2.4 KiB
Rust
91 lines
2.4 KiB
Rust
//! The Solidity compiler unit tests for libraries.
|
|
|
|
#![cfg(test)]
|
|
|
|
use std::collections::BTreeMap;
|
|
|
|
pub const LIBRARY_TEST_SOURCE: &str = r#"
|
|
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.0;
|
|
|
|
// A simple library with at least one external method
|
|
library SimpleLibrary {
|
|
function add(uint256 a, uint256 b) external pure returns (uint256) {
|
|
return a + b;
|
|
}
|
|
}
|
|
|
|
// A contract calling that library
|
|
contract SimpleContract {
|
|
using SimpleLibrary for uint256;
|
|
|
|
function performAlgorithm(uint256 a, uint256 b) public pure returns (uint256) {
|
|
uint sum = 0;
|
|
if (a > b) {
|
|
while (true) {
|
|
sum += a.add(b);
|
|
}
|
|
}
|
|
return sum;
|
|
}
|
|
}
|
|
"#;
|
|
|
|
#[test]
|
|
fn not_specified() {
|
|
let mut sources = BTreeMap::new();
|
|
sources.insert("test.sol".to_owned(), LIBRARY_TEST_SOURCE.to_owned());
|
|
|
|
let output =
|
|
super::build_solidity_and_detect_missing_libraries(sources.clone(), BTreeMap::new())
|
|
.expect("Test failure");
|
|
assert!(
|
|
output
|
|
.contracts
|
|
.as_ref()
|
|
.expect("Always exists")
|
|
.get("test.sol")
|
|
.expect("Always exists")
|
|
.get("SimpleContract")
|
|
.expect("Always exists")
|
|
.missing_libraries
|
|
.as_ref()
|
|
.expect("Always exists")
|
|
.contains("test.sol:SimpleLibrary"),
|
|
"Missing library not detected"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn specified() {
|
|
let mut sources = BTreeMap::new();
|
|
sources.insert("test.sol".to_owned(), LIBRARY_TEST_SOURCE.to_owned());
|
|
|
|
let mut libraries = BTreeMap::new();
|
|
libraries
|
|
.entry("test.sol".to_string())
|
|
.or_insert_with(BTreeMap::new)
|
|
.entry("SimpleLibrary".to_string())
|
|
.or_insert("0x00000000000000000000000000000000DEADBEEF".to_string());
|
|
|
|
let output =
|
|
super::build_solidity_and_detect_missing_libraries(sources.clone(), libraries.clone())
|
|
.expect("Test failure");
|
|
assert!(
|
|
output
|
|
.contracts
|
|
.as_ref()
|
|
.expect("Always exists")
|
|
.get("test.sol")
|
|
.expect("Always exists")
|
|
.get("SimpleContract")
|
|
.expect("Always exists")
|
|
.missing_libraries
|
|
.as_ref()
|
|
.cloned()
|
|
.unwrap_or_default()
|
|
.is_empty(),
|
|
"The list of missing libraries must be empty"
|
|
);
|
|
}
|