print.rs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // SPDX-License-Identifier: Apache-2.0
  2. use crate::build_solidity;
  3. use soroban_sdk::testutils::Logs;
  4. #[test]
  5. fn log_runtime_error() {
  6. let src = build_solidity(
  7. r#"contract counter {
  8. uint64 public count = 1;
  9. function decrement() public returns (uint64){
  10. count -= 1;
  11. return count;
  12. }
  13. }"#,
  14. |_| {},
  15. );
  16. let addr = src.contracts.last().unwrap();
  17. src.invoke_contract(addr, "decrement", vec![]);
  18. let logs = src.invoke_contract_expect_error(addr, "decrement", vec![]);
  19. assert!(logs[0].contains("runtime_error: math overflow in test.sol:5:17-27"));
  20. }
  21. #[test]
  22. fn print() {
  23. let src = build_solidity(
  24. r#"contract Printer {
  25. function print() public {
  26. print("Hello, World!");
  27. }
  28. }"#,
  29. |_| {},
  30. );
  31. let addr = src.contracts.last().unwrap();
  32. src.invoke_contract(addr, "print", vec![]);
  33. let logs = src.env.logs().all();
  34. assert!(logs[0].contains("Hello, World!"));
  35. }
  36. #[test]
  37. fn print_then_runtime_error() {
  38. let src = build_solidity(
  39. r#"contract counter {
  40. uint64 public count = 1;
  41. function decrement() public returns (uint64){
  42. print("Second call will FAIL!");
  43. count -= 1;
  44. return count;
  45. }
  46. }"#,
  47. |_| {},
  48. );
  49. let addr = src.contracts.last().unwrap();
  50. src.invoke_contract(addr, "decrement", vec![]);
  51. let logs = src.invoke_contract_expect_error(addr, "decrement", vec![]);
  52. assert!(logs[0].contains("Second call will FAIL!"));
  53. assert!(logs[1].contains("runtime_error: math overflow in test.sol:6:17-27"));
  54. }