Fs
Provides utilities to interact with the filesystem. In order to use this module the
fs_permissions
setting must be set correctly in foundry.toml
.
Examples
Reading files
Read files as string or bytes
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import {Test, expect, fs, BytesResult, StringResult} from "vulcan/test.sol";
contract FsExample is Test {
// These files are available only on the context of vulcan
// You will need to provide your own files and edit the read permissions accordingly
string constant HELLO_WORLD = "./test/fixtures/fs/read/hello_world.txt";
string constant BINARY_TEST_FILE = "./test/fixtures/fs/write/test_binary.txt";
function test() external {
string memory stringResult = fs.readFile(HELLO_WORLD).unwrap();
expect(stringResult).toEqual("Hello, World!\n");
bytes memory bytesResult = fs.readFileBinary(HELLO_WORLD).unwrap();
expect(bytesResult).toEqual("Hello, World!\n");
}
}
Writing files
Write files as strings or bytes
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import {Test, expect, fs, BytesResult, StringResult, EmptyResult} from "vulcan/test.sol";
contract FsExample is Test {
// These files are available only on the context of vulcan
// You will need to provide your own files and edit the read permissions accordingly
string constant TEXT_TEST_FILE = "./test/fixtures/fs/write/example.txt";
function test() external {
// Write string
fs.writeFile(TEXT_TEST_FILE, "This is a test").expect("Failed to write file");
string memory readStringResult = fs.readFile(TEXT_TEST_FILE).unwrap();
expect(readStringResult).toEqual("This is a test");
// Write binary
fs.writeFileBinary(TEXT_TEST_FILE, "This is a test in binary").expect("Failed to write file");
bytes memory readBytesResult = fs.readFileBinary(TEXT_TEST_FILE).unwrap();
expect(readBytesResult).toEqual("This is a test in binary");
}
}
Other operations
Obtain metadata and check if file exists
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import {Test} from "vulcan/test.sol";
import {expect} from "vulcan/test/Expect.sol";
import {fs, FsMetadata} from "vulcan/test/Fs.sol";
import {BoolResult} from "vulcan/test/Result.sol";
contract FsExample is Test {
// These files are available only on the context of vulcan
// You will need to provide your own files and edit the read permissions accordingly
string constant READ_EXAMPLE = "./test/fixtures/fs/read/hello_world.txt";
string constant NOT_FOUND_EXAMPLE = "./test/fixtures/fs/read/lkjjsadflkjasdf.txt";
function test() external {
FsMetadata memory metadata = fs.metadata(READ_EXAMPLE).expect("Failed to get metadata");
expect(metadata.isDir).toBeFalse();
bool exists = fs.fileExists(READ_EXAMPLE).unwrap();
expect(exists).toBeTrue();
exists = fs.fileExists(NOT_FOUND_EXAMPLE).unwrap();
expect(exists).toBeFalse();
}
}