imports.rs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. // SPDX-License-Identifier: Apache-2.0
  2. use assert_cmd::Command;
  3. #[test]
  4. fn import_map_dup() {
  5. let mut cmd = Command::cargo_bin("solang").unwrap();
  6. let dup = cmd
  7. .args([
  8. "compile",
  9. "--target",
  10. "solana",
  11. "--importmap",
  12. "foo=tests",
  13. "--importmap",
  14. "foo=tests",
  15. "foo.sol",
  16. ])
  17. .env("exit", "1")
  18. .assert();
  19. let output = dup.get_output();
  20. let stderr = String::from_utf8_lossy(&output.stderr);
  21. println!("stderr: {stderr}");
  22. assert_eq!(
  23. stderr,
  24. "error: import path 'tests': duplicate mapping for 'foo'\n"
  25. );
  26. }
  27. #[test]
  28. fn import_map_badpath() {
  29. let mut cmd = Command::cargo_bin("solang").unwrap();
  30. let badpath = cmd
  31. .args([
  32. "compile",
  33. "--target",
  34. "solana",
  35. "--importmap",
  36. "foo=/does/not/exist",
  37. "bar.sol",
  38. ])
  39. .env("exit", "1")
  40. .assert();
  41. let output = badpath.get_output();
  42. let stderr = String::from_utf8_lossy(&output.stderr);
  43. println!("stderr: {stderr}");
  44. assert!(stderr.contains("error: import path '/does/not/exist': "));
  45. }
  46. #[test]
  47. fn import_map() {
  48. let mut cmd = Command::cargo_bin("solang").unwrap();
  49. let assert = cmd
  50. .args([
  51. "compile",
  52. "--target",
  53. "solana",
  54. "--importmap",
  55. "foo=imports/",
  56. "import_map.sol",
  57. ])
  58. .current_dir("tests/imports_testcases")
  59. .assert();
  60. let output = assert.get_output();
  61. assert_eq!(String::from_utf8_lossy(&output.stderr), "");
  62. let mut cmd = Command::cargo_bin("solang").unwrap();
  63. let badpath = cmd
  64. .args(["compile", "import_map.sol", "--target", "solana"])
  65. .current_dir("tests/imports_testcases")
  66. .assert();
  67. let output = badpath.get_output();
  68. let stderr = String::from_utf8_lossy(&output.stderr);
  69. println!("stderr: {stderr}");
  70. assert!(stderr.contains("file not found 'foo/bar.sol'"));
  71. }
  72. #[test]
  73. fn import() {
  74. let mut cmd = Command::cargo_bin("solang").unwrap();
  75. let assert = cmd
  76. .args([
  77. "compile",
  78. "--target",
  79. "solana",
  80. "--importpath",
  81. "./imports_testcases/imports",
  82. "imports_testcases/import.sol",
  83. ])
  84. .current_dir("tests")
  85. .assert();
  86. let output = assert.get_output();
  87. assert_eq!(String::from_utf8_lossy(&output.stderr), "");
  88. let mut cmd = Command::cargo_bin("solang").unwrap();
  89. let badpath = cmd
  90. .args(["compile", "--target", "solana", "import.sol"])
  91. .current_dir("tests/imports_testcases")
  92. .assert();
  93. let output = badpath.get_output();
  94. let stderr = String::from_utf8_lossy(&output.stderr);
  95. println!("stderr: {stderr}");
  96. assert!(stderr.contains("file not found 'bar.sol'"));
  97. }
  98. #[test]
  99. fn contract_name_defined_twice() {
  100. let mut cmd = Command::cargo_bin("solang").unwrap();
  101. let ok = cmd
  102. .args(["compile", "--target", "solana", "bar.sol", "rel.sol"])
  103. .current_dir("tests/imports_testcases/imports")
  104. .assert();
  105. let output = ok.get_output();
  106. assert_eq!(String::from_utf8_lossy(&output.stderr), "");
  107. let mut cmd = Command::cargo_bin("solang").unwrap();
  108. let not_ok = cmd
  109. .args([
  110. "compile",
  111. "--target",
  112. "solana",
  113. "relative_import.sol",
  114. "rel.sol",
  115. ])
  116. .current_dir("tests/imports_testcases/imports")
  117. .assert();
  118. let output = not_ok.get_output();
  119. let err = String::from_utf8_lossy(&output.stderr);
  120. println!("{}", err);
  121. // The error contains the absolute paths, so we cannot assert the whole string
  122. assert!(err.starts_with("error: contract rel defined at "));
  123. assert!(err.contains("relative_import.sol:1:1-6:2 and "));
  124. assert!(err.ends_with("rel.sol:2:1-16\n"));
  125. }