test(parser): add record creation tests
This commit is contained in:
parent
85f839abe4
commit
f2c359f9d5
|
@ -1261,3 +1261,171 @@ fn record_update() {
|
|||
}),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn record_create_labeled() {
|
||||
let code = indoc! {r#"
|
||||
fn create() {
|
||||
User { name: "Aiken", age, thing: 2 }
|
||||
}
|
||||
"#};
|
||||
|
||||
assert_definition(
|
||||
code,
|
||||
ast::UntypedDefinition::Fn(ast::Function {
|
||||
arguments: vec![],
|
||||
body: expr::UntypedExpr::Call {
|
||||
arguments: vec![
|
||||
ast::CallArg {
|
||||
label: Some("name".to_string()),
|
||||
location: Span::new((), 23..36),
|
||||
value: expr::UntypedExpr::String {
|
||||
location: Span::new((), 29..36),
|
||||
value: "Aiken".to_string(),
|
||||
},
|
||||
},
|
||||
ast::CallArg {
|
||||
label: Some("age".to_string()),
|
||||
location: Span::new((), 38..41),
|
||||
value: expr::UntypedExpr::Var {
|
||||
location: Span::new((), 38..41),
|
||||
name: "age".to_string(),
|
||||
},
|
||||
},
|
||||
ast::CallArg {
|
||||
label: Some("thing".to_string()),
|
||||
location: Span::new((), 43..51),
|
||||
value: expr::UntypedExpr::Int {
|
||||
location: Span::new((), 50..51),
|
||||
value: "2".to_string(),
|
||||
},
|
||||
},
|
||||
],
|
||||
fun: Box::new(expr::UntypedExpr::Var {
|
||||
location: Span::new((), 16..20),
|
||||
name: "User".to_string(),
|
||||
}),
|
||||
location: Span::new((), 16..53),
|
||||
},
|
||||
doc: None,
|
||||
location: Span::new((), 0..11),
|
||||
name: "create".to_string(),
|
||||
public: false,
|
||||
return_annotation: None,
|
||||
return_type: (),
|
||||
end_position: 66,
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn record_create_labeled_with_field_access() {
|
||||
let code = indoc! {r#"
|
||||
fn create() {
|
||||
some_module.User { name: "Aiken", age, thing: 2 }
|
||||
}
|
||||
"#};
|
||||
|
||||
assert_definition(
|
||||
code,
|
||||
ast::UntypedDefinition::Fn(ast::Function {
|
||||
arguments: vec![],
|
||||
body: expr::UntypedExpr::Call {
|
||||
arguments: vec![
|
||||
ast::CallArg {
|
||||
label: Some("name".to_string()),
|
||||
location: Span::new((), 35..48),
|
||||
value: expr::UntypedExpr::String {
|
||||
location: Span::new((), 41..48),
|
||||
value: "Aiken".to_string(),
|
||||
},
|
||||
},
|
||||
ast::CallArg {
|
||||
label: Some("age".to_string()),
|
||||
location: Span::new((), 50..53),
|
||||
value: expr::UntypedExpr::Var {
|
||||
location: Span::new((), 50..53),
|
||||
name: "age".to_string(),
|
||||
},
|
||||
},
|
||||
ast::CallArg {
|
||||
label: Some("thing".to_string()),
|
||||
location: Span::new((), 55..63),
|
||||
value: expr::UntypedExpr::Int {
|
||||
location: Span::new((), 62..63),
|
||||
value: "2".to_string(),
|
||||
},
|
||||
},
|
||||
],
|
||||
fun: Box::new(expr::UntypedExpr::FieldAccess {
|
||||
location: Span::new((), 16..32),
|
||||
label: "User".to_string(),
|
||||
container: Box::new(expr::UntypedExpr::Var {
|
||||
location: Span::new((), 16..27),
|
||||
name: "some_module".to_string(),
|
||||
}),
|
||||
}),
|
||||
location: Span::new((), 16..65),
|
||||
},
|
||||
doc: None,
|
||||
location: Span::new((), 0..11),
|
||||
name: "create".to_string(),
|
||||
public: false,
|
||||
return_annotation: None,
|
||||
return_type: (),
|
||||
end_position: 78,
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn record_create_unlabeled() {
|
||||
let code = indoc! {r#"
|
||||
fn create() {
|
||||
some_module.Thing(1, a)
|
||||
}
|
||||
"#};
|
||||
|
||||
assert_definition(
|
||||
code,
|
||||
ast::UntypedDefinition::Fn(ast::Function {
|
||||
arguments: vec![],
|
||||
body: expr::UntypedExpr::Call {
|
||||
arguments: vec![
|
||||
ast::CallArg {
|
||||
label: None,
|
||||
location: Span::new((), 34..35),
|
||||
value: expr::UntypedExpr::Int {
|
||||
location: Span::new((), 34..35),
|
||||
value: "1".to_string(),
|
||||
},
|
||||
},
|
||||
ast::CallArg {
|
||||
label: None,
|
||||
location: Span::new((), 37..38),
|
||||
value: expr::UntypedExpr::Var {
|
||||
location: Span::new((), 37..38),
|
||||
name: "a".to_string(),
|
||||
},
|
||||
},
|
||||
],
|
||||
fun: Box::new(expr::UntypedExpr::FieldAccess {
|
||||
location: Span::new((), 16..33),
|
||||
label: "Thing".to_string(),
|
||||
container: Box::new(expr::UntypedExpr::Var {
|
||||
location: Span::new((), 16..27),
|
||||
name: "some_module".to_string(),
|
||||
}),
|
||||
}),
|
||||
location: Span::new((), 16..39),
|
||||
},
|
||||
doc: None,
|
||||
location: Span::new((), 0..11),
|
||||
name: "create".to_string(),
|
||||
public: false,
|
||||
return_annotation: None,
|
||||
return_type: (),
|
||||
end_position: 40,
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue