ShortStrings.t.sol 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {Test} from "forge-std/Test.sol";
  4. import {ShortStrings, ShortString} from "@openzeppelin/contracts/utils/ShortStrings.sol";
  5. contract ShortStringsTest is Test {
  6. string _fallback;
  7. function testRoundtripShort(string memory input) external {
  8. vm.assume(_isShort(input));
  9. ShortString short = ShortStrings.toShortString(input);
  10. string memory output = ShortStrings.toString(short);
  11. assertEq(input, output);
  12. }
  13. function testRoundtripWithFallback(string memory input, string memory fallbackInitial) external {
  14. _fallback = fallbackInitial; // Make sure that the initial value has no effect
  15. ShortString short = ShortStrings.toShortStringWithFallback(input, _fallback);
  16. string memory output = ShortStrings.toStringWithFallback(short, _fallback);
  17. assertEq(input, output);
  18. }
  19. function testRevertLong(string memory input) external {
  20. vm.assume(!_isShort(input));
  21. vm.expectRevert(abi.encodeWithSelector(ShortStrings.StringTooLong.selector, input));
  22. this.toShortString(input);
  23. }
  24. function testLengthShort(string memory input) external {
  25. vm.assume(_isShort(input));
  26. uint256 inputLength = bytes(input).length;
  27. ShortString short = ShortStrings.toShortString(input);
  28. uint256 shortLength = ShortStrings.byteLength(short);
  29. assertEq(inputLength, shortLength);
  30. }
  31. function testLengthWithFallback(string memory input, string memory fallbackInitial) external {
  32. _fallback = fallbackInitial;
  33. uint256 inputLength = bytes(input).length;
  34. ShortString short = ShortStrings.toShortStringWithFallback(input, _fallback);
  35. uint256 shortLength = ShortStrings.byteLengthWithFallback(short, _fallback);
  36. assertEq(inputLength, shortLength);
  37. }
  38. function toShortString(string memory input) external pure returns (ShortString) {
  39. return ShortStrings.toShortString(input);
  40. }
  41. function _isShort(string memory input) internal pure returns (bool) {
  42. return bytes(input).length < 32;
  43. }
  44. }