Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions integration/hurl/tests_ok/no_header/hurl/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--no-header user-agent
--no-header Accept
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello World!
5 changes: 5 additions & 0 deletions integration/hurl/tests_ok/no_header/no_header_config_file.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Set-StrictMode -Version latest
$ErrorActionPreference = 'Stop'

$env:XDG_CONFIG_HOME=$PSScriptRoot
hurl tests_ok/no_header/no_header.hurl
6 changes: 6 additions & 0 deletions integration/hurl/tests_ok/no_header/no_header_config_file.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash
set -Eeuo pipefail

XDG_CONFIG_HOME=$(dirname "$0")
export XDG_CONFIG_HOME
hurl tests_ok/no_header/no_header.hurl
35 changes: 29 additions & 6 deletions packages/hurl/src/cli/options/config_file/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,19 @@ fn parse_option(reader: &mut Reader, options: &mut CliOptions) -> Result<(), Con
options.no_cookie_store = true;
Ok(())
}
"no-header" => {
parse_value_separator(reader)?;
let value = parse_value(reader)?;

if value.is_empty() {
return Err(ConfigFileError::new(
save.pos,
"Option --no-header requires a value",
));
}
options.no_headers.push(value);
Ok(())
}
"no-jsonpath-coercion" => {
expect_no_value(reader)?;
options.no_jsonpath_coercion = true;
Expand Down Expand Up @@ -317,19 +330,19 @@ mod tests {
let mut options = CliOptions::default();
assert!(parse_option(&mut reader, &mut options).is_ok());
assert_eq!(options.headers, vec!["header1:value1"]);
assert_eq!(reader.cursor().pos, Pos::new(1, 24));
assert_eq!(reader.cursor().pos, Pos::new(2, 1));

let mut reader = Reader::new("--header header2:value2\n--verbose\n");
let mut options = CliOptions::default();
assert!(parse_option(&mut reader, &mut options).is_ok());
assert_eq!(options.headers, vec!["header2:value2"]);
assert_eq!(reader.cursor().pos, Pos::new(1, 24));
assert_eq!(reader.cursor().pos, Pos::new(2, 1));

let mut reader = Reader::new("--header --test:1\n");
let mut options = CliOptions::default();
assert!(parse_option(&mut reader, &mut options).is_ok());
assert_eq!(options.headers, vec!["--test:1"]);
assert_eq!(reader.cursor().pos, Pos::new(1, 18));
assert_eq!(reader.cursor().pos, Pos::new(2, 1));
}

#[test]
Expand All @@ -347,7 +360,7 @@ mod tests {
let mut options = CliOptions::default();
assert!(parse_option(&mut reader, &mut options).is_ok());
assert_eq!(options.user, Some("bob@email.com:secret".to_string()));
assert_eq!(reader.cursor().pos, Pos::new(1, 28));
assert_eq!(reader.cursor().pos, Pos::new(2, 1));
}

#[test]
Expand All @@ -356,7 +369,7 @@ mod tests {
let mut options = CliOptions::default();
assert!(parse_option(&mut reader, &mut options).is_ok());
assert_eq!(options.delay, std::time::Duration::from_secs(1));
assert_eq!(reader.cursor().pos, Pos::new(1, 11));
assert_eq!(reader.cursor().pos, Pos::new(2, 1));
}

#[test]
Expand All @@ -365,7 +378,7 @@ mod tests {
let mut options = CliOptions::default();
assert!(parse_option(&mut reader, &mut options).is_ok());
assert_eq!(options.limit_rate, Some(BytesPerSec(2_000_000)));
assert_eq!(reader.cursor().pos, Pos::new(1, 21));
assert_eq!(reader.cursor().pos, Pos::new(2, 1));
}

#[test]
Expand Down Expand Up @@ -526,6 +539,16 @@ mod tests {
assert_eq!(reader.cursor().pos, Pos::new(2, 1));
}

#[test]
fn test_parse_option_no_header() {
let mut reader = Reader::new("--no-header=user-agent\n");
let mut options = CliOptions::default();
assert!(options.no_headers.is_empty());
assert!(parse_option(&mut reader, &mut options).is_ok());
assert_eq!(options.no_headers, vec!["user-agent"]);
assert_eq!(reader.cursor().pos, Pos::new(2, 1));
}

#[test]
fn test_parse_option_no_jsonpath_coercion() {
let mut reader = Reader::new("--no-jsonpath-coercion\n");
Expand Down
7 changes: 5 additions & 2 deletions packages/hurl/src/cli/options/config_file/primitives.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ pub fn parse_value(reader: &mut Reader) -> Result<String, ConfigFileError> {
}
} else {
let s = reader.read_while(|c| c != '\n').trim().to_string();
if reader.peek() == Some('\n') {
reader.read(); // consume newline
}
Ok(s)
}
}
Expand Down Expand Up @@ -197,12 +200,12 @@ mod tests {
// You can have an empty value
let mut reader = Reader::new("\n");
assert_eq!(parse_value(&mut reader).unwrap(), "");
assert_eq!((reader.cursor().index), CharPos(0));
assert_eq!((reader.cursor().index), CharPos(1));

// Unquoted String
let mut reader = Reader::new("1\n");
assert_eq!(parse_value(&mut reader).unwrap(), "1");
assert_eq!((reader.cursor().index), CharPos(1));
assert_eq!((reader.cursor().index), CharPos(2));

// Quoted String
let mut reader = Reader::new("\"Hello\"\n");
Expand Down
Loading