50 lines
1.2 KiB
Solidity
50 lines
1.2 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity >=0.7.0 <0.9.0;
|
|
|
|
import "../src/Test.sol";
|
|
|
|
contract StdJsonTest is Test {
|
|
using stdJson for string;
|
|
|
|
string root;
|
|
string path;
|
|
|
|
function setUp() public {
|
|
root = vm.projectRoot();
|
|
path = string.concat(root, "/test/fixtures/test.json");
|
|
}
|
|
|
|
struct SimpleJson {
|
|
uint256 a;
|
|
string b;
|
|
}
|
|
|
|
struct NestedJson {
|
|
uint256 a;
|
|
string b;
|
|
SimpleJson c;
|
|
}
|
|
|
|
function test_readJson() public view {
|
|
string memory json = vm.readFile(path);
|
|
assertEq(json.readUint(".a"), 123);
|
|
}
|
|
|
|
function test_writeJson() public {
|
|
string memory json = "json";
|
|
json.serialize("a", uint256(123));
|
|
string memory semiFinal = json.serialize("b", string("test"));
|
|
string memory finalJson = json.serialize("c", semiFinal);
|
|
finalJson.write(path);
|
|
|
|
string memory json_ = vm.readFile(path);
|
|
bytes memory data = json_.parseRaw("$");
|
|
NestedJson memory decodedData = abi.decode(data, (NestedJson));
|
|
|
|
assertEq(decodedData.a, 123);
|
|
assertEq(decodedData.b, "test");
|
|
assertEq(decodedData.c.a, 123);
|
|
assertEq(decodedData.c.b, "test");
|
|
}
|
|
}
|