Browse Source

Add hidden --no-config option

David Peter 2 years ago
parent
commit
73ed7fa020
2 changed files with 40 additions and 4 deletions
  1. 18 4
      numbat-cli/src/main.rs
  2. 22 0
      numbat-cli/tests/integration.rs

+ 18 - 4
numbat-cli/src/main.rs

@@ -122,9 +122,13 @@ struct Args {
     #[arg(long, value_name = "MODE")]
     intro_banner: Option<IntroBanner>,
 
-    /// Turn on debug mode (e.g. disassembler output).
+    /// Turn on debug mode and print disassembler output (hidden, mainly for development)
     #[arg(long, short, hide = true)]
     debug: bool,
+
+    /// Do not load the user configuration file (hidden, mainly for testing purposes)
+    #[arg(long, hide = true)]
+    no_config: bool,
 }
 
 #[derive(Debug, Clone, Copy, PartialEq)]
@@ -164,7 +168,9 @@ impl Cli {
 
         let user_config_path = Self::get_config_path().join("config.toml");
 
-        let mut config = if let Ok(contents) = fs::read_to_string(&user_config_path) {
+        let mut config = if args.no_config {
+            Config::default()
+        } else if let Ok(contents) = fs::read_to_string(&user_config_path) {
             toml::from_str(&contents).context(format!(
                 "Error while loading {}",
                 user_config_path.to_string_lossy()
@@ -173,8 +179,16 @@ impl Cli {
             Config::default()
         };
 
-        config.load_prelude = !args.no_prelude;
-        config.load_user_init = !(args.no_prelude || args.no_init);
+        config.load_prelude = if args.no_prelude {
+            false
+        } else {
+            config.load_prelude
+        };
+        config.load_user_init = if args.no_prelude || args.no_init {
+            false
+        } else {
+            config.load_user_init
+        };
 
         config.intro_banner = args.intro_banner.unwrap_or(config.intro_banner);
         config.pretty_print = args.pretty_print.unwrap_or(config.pretty_print);

+ 22 - 0
numbat-cli/tests/integration.rs

@@ -8,6 +8,7 @@ fn numbat() -> Command {
 
     let mut cmd = Command::cargo_bin("numbat").unwrap();
     cmd.arg("--no-init");
+    cmd.arg("--no-config");
     cmd
 }
 
@@ -91,6 +92,27 @@ fn without_prelude() {
         .assert()
         .success()
         .stdout(predicates::str::contains("5.2"));
+
+    numbat()
+        .arg("--no-prelude")
+        .arg("--expression")
+        .arg("1 meter")
+        .assert()
+        .failure()
+        .stderr(predicates::str::contains("unknown identifier"));
+}
+
+#[test]
+fn pretty_printing() {
+    numbat()
+        .arg("--pretty-print=always")
+        .arg("--expression")
+        .arg("let v=30km/h")
+        .assert()
+        .success()
+        .stdout(predicates::str::contains(
+            "let v: Velocity = 30 kilometre / hour",
+        ));
 }
 
 #[test]