Merge pull request #913 from andrasio/tests-builtins

`get` preserves anchored inputs.
This commit is contained in:
Andrés N. Robalino 2019-11-03 05:11:09 -05:00 committed by GitHub
commit 1b784cb77a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 87 deletions

View File

@ -97,7 +97,7 @@ pub fn get_column_path(
let res = match value { let res = match value {
Ok(fetched) => match fetched { Ok(fetched) => match fetched {
Some(Tagged { item: v, tag }) => Ok((v.clone()).tagged(&tag)), Some(Tagged { item: v, .. }) => Ok((v.clone()).tagged(&obj.tag)),
None => match obj { None => match obj {
// If its None check for certain values. // If its None check for certain values.
Tagged { Tagged {
@ -147,8 +147,14 @@ pub fn get(
item: Value::Table(rows), item: Value::Table(rows),
.. ..
} => { } => {
for item in rows { for row in rows {
result.push_back(ReturnSuccess::value(item.clone())); result.push_back(ReturnSuccess::value(
Tagged {
item: row.item,
tag: Tag::from(&item.tag),
}
.map_anchored(&item.tag.anchor),
))
} }
} }
other => result other => result

View File

@ -105,6 +105,17 @@ impl<T> Tagged<T> {
mapped.tagged(tag) mapped.tagged(tag)
} }
pub fn map_anchored(self, anchor: &Option<AnchorLocation>) -> Tagged<T> {
let mut tag = self.tag;
tag.anchor = anchor.clone();
Tagged {
item: self.item,
tag: tag,
}
}
pub fn tag(&self) -> Tag { pub fn tag(&self) -> Tag {
self.tag.clone() self.tag.clone()
} }
@ -418,16 +429,6 @@ impl Span {
self.slice(source).to_string().spanned(*self) self.slice(source).to_string().spanned(*self)
} }
/*
pub fn unknown_with_uuid(uuid: Uuid) -> Span {
Span {
start: 0,
end: 0,
source: Some(uuid),
}
}
*/
pub fn start(&self) -> usize { pub fn start(&self) -> usize {
self.start self.start
} }

View File

@ -166,80 +166,6 @@ fn last_gets_last_row_when_no_amount_given() {
}) })
} }
#[test]
fn get() {
Playground::setup("get_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContent(
"sample.toml",
r#"
nu_party_venue = "zion"
"#,
)]);
let actual = nu!(
cwd: dirs.test(), h::pipeline(
r#"
open sample.toml
| get nu_party_venue
| echo $it
"#
));
assert_eq!(actual, "zion");
})
}
#[test]
fn get_more_than_one_member() {
Playground::setup("get_test_2", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContent(
"sample.toml",
r#"
[[fortune_tellers]]
name = "Andrés N. Robalino"
arepas = 1
broken_builds = 0
[[fortune_tellers]]
name = "Jonathan Turner"
arepas = 1
broken_builds = 1
[[fortune_tellers]]
name = "Yehuda Katz"
arepas = 1
broken_builds = 1
"#,
)]);
let actual = nu!(
cwd: dirs.test(), h::pipeline(
r#"
open sample.toml
| get fortune_tellers
| get arepas broken_builds
| sum
| echo $it
"#
));
assert_eq!(actual, "5");
})
}
#[test]
fn get_requires_at_least_one_member() {
Playground::setup("first_test_3", |dirs, sandbox| {
sandbox.with_files(vec![EmptyFile("andres.txt")]);
let actual = nu_error!(
cwd: dirs.test(), "ls | get"
);
assert!(actual.contains("requires member parameter"));
})
}
#[test] #[test]
fn lines() { fn lines() {
let actual = nu!( let actual = nu!(