integration.rs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. use std::path::Path;
  2. use assert_cmd::Command;
  3. fn numbat() -> Command {
  4. let module_path = Path::new(&std::env::var_os("CARGO_MANIFEST_DIR").unwrap()).join("modules");
  5. std::env::set_var("NUMBAT_MODULES_PATH", module_path);
  6. let mut cmd = Command::cargo_bin("numbat").unwrap();
  7. cmd.arg("--no-init");
  8. cmd
  9. }
  10. #[test]
  11. fn pass_expression_on_command_line() {
  12. numbat()
  13. .arg("--expression")
  14. .arg("2 meter + 3 meter")
  15. .assert()
  16. .success()
  17. .stdout(predicates::str::contains("5 m"));
  18. numbat()
  19. .arg("-e")
  20. .arg("let x = 2")
  21. .arg("-e")
  22. .arg("x^3")
  23. .assert()
  24. .success()
  25. .stdout(predicates::str::contains("8"));
  26. numbat()
  27. .arg("--expression")
  28. .arg("2 +/ 3")
  29. .assert()
  30. .stderr(predicates::str::contains("while parsing"));
  31. numbat()
  32. .arg("--expression")
  33. .arg("2 meter + 3 second")
  34. .assert()
  35. .failure()
  36. .stderr(predicates::str::contains("while type checking"));
  37. numbat()
  38. .arg("--expression")
  39. .arg("1/0")
  40. .assert()
  41. .failure()
  42. .stderr(predicates::str::contains("runtime error"));
  43. numbat()
  44. .arg("--expression")
  45. .arg("type(2 m/s)")
  46. .assert()
  47. .success()
  48. .stdout(predicates::str::contains("Length / Time"));
  49. }
  50. #[test]
  51. fn read_code_from_file() {
  52. numbat()
  53. .arg("tests/examples/pendulum.nbt")
  54. .assert()
  55. .success();
  56. numbat()
  57. .arg("tests/examples/parser_error.nbt")
  58. .assert()
  59. .failure()
  60. .stderr(predicates::str::contains("while parsing"));
  61. }
  62. #[test]
  63. fn print_calls() {
  64. numbat()
  65. .arg("tests/examples/print.nbt")
  66. .assert()
  67. .success()
  68. .stdout(predicates::str::contains(
  69. "1 \n2 m\nhello world\npi = 3.14159\n1 + 2 = 3\n",
  70. ));
  71. }
  72. #[test]
  73. fn without_prelude() {
  74. numbat()
  75. .arg("--no-prelude")
  76. .arg("--expression")
  77. .arg("2.1 + 3.1")
  78. .assert()
  79. .success()
  80. .stdout(predicates::str::contains("5.2"));
  81. }
  82. #[test]
  83. fn help_text() {
  84. numbat()
  85. .write_stdin("help")
  86. .assert()
  87. .success()
  88. .stdout(predicates::str::contains(
  89. "Energy of red photons: 1.87855 eV",
  90. ));
  91. }