Skip to content

Commit b4725d4

Browse files
committed
[make] fix tests
1 parent 564cff4 commit b4725d4

File tree

5 files changed

+35
-22
lines changed

5 files changed

+35
-22
lines changed

make/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
149149
print,
150150
precious: false,
151151
terminate,
152-
rules: Default::default(),
152+
..Default::default()
153153
};
154154

155155
if clear {

make/src/parser/parse.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl From<std::io::Error> for Error {
3636
impl std::error::Error for Error {}
3737

3838
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
39-
pub struct ParseError(Vec<String>);
39+
pub struct ParseError(pub Vec<String>);
4040

4141
impl std::fmt::Display for ParseError {
4242
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
@@ -90,7 +90,20 @@ pub struct Parse {
9090
pub errors: Vec<String>,
9191
}
9292

93-
pub fn parse(text: &str) -> Result<GreenNode, ParseError> {
93+
#[derive(Clone)]
94+
pub struct Parsed(GreenNode);
95+
96+
impl Parsed {
97+
pub fn syntax(&self) -> SyntaxNode {
98+
SyntaxNode::new_root(self.0.clone())
99+
}
100+
101+
pub fn root(&self) -> Makefile {
102+
Makefile::cast(self.syntax()).unwrap()
103+
}
104+
}
105+
106+
pub fn parse(text: &str) -> Result<Parsed, ParseError> {
94107
struct Parser {
95108
/// input tokens, including whitespace,
96109
/// in *reverse* order.
@@ -274,7 +287,7 @@ pub fn parse(text: &str) -> Result<GreenNode, ParseError> {
274287
if !result.errors.is_empty() {
275288
Err(ParseError(result.errors))
276289
} else {
277-
Ok(result.green_node)
290+
Ok(Parsed(result.green_node))
278291
}
279292
}
280293

@@ -383,7 +396,7 @@ impl Makefile {
383396
r.read_to_string(&mut buf)?;
384397

385398
let parsed = parse(&buf)?;
386-
Ok(Makefile::cast(SyntaxNode::new_root(parsed)).unwrap())
399+
Ok(parsed.root())
387400
}
388401

389402
pub fn rules(&self) -> impl Iterator<Item = Rule> {
@@ -518,6 +531,6 @@ impl FromStr for Makefile {
518531

519532
fn from_str(s: &str) -> Result<Self, Self::Err> {
520533
let processed = preprocess(s).map_err(|e| ParseError(vec![e.to_string()]))?;
521-
parse(&processed).map(|node| Makefile::cast(SyntaxNode::new_root(node)).unwrap())
534+
parse(&processed).map(|node| node.root())
522535
}
523536
}

make/src/rule.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@ impl Rule {
147147
// -q flag
148148
if quit {
149149
if up_to_date {
150-
return Ok(());
150+
process::exit(0);
151151
} else {
152-
return Err(NotUpToDateError { target: target.to_string() });
152+
process::exit(1);
153153
}
154154
}
155155
}

make/tests/integration.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ mod arguments {
233233
run_test_helper(
234234
&["-kf", "tests/makefiles/arguments/dash_k.mk"],
235235
"OK\necho 12\n12\n",
236-
"make: ExecutionError { exit_code: Some(1) }\nmake: Target z not remade because of errors\n",
236+
"make: execution error: 1\nmake: Target z not remade because of errors\n",
237237
2,
238238
);
239239
}
@@ -342,16 +342,16 @@ mod macros {
342342
mod target_behavior {
343343
use libc::{kill, SIGINT};
344344
use std::{thread, time::Duration};
345-
345+
use posixutils_make::parser::parse::ParseError;
346346
use super::*;
347347

348348
#[test]
349349
fn no_targets() {
350350
run_test_helper(
351351
&["-f", "tests/makefiles/target_behavior/no_targets.mk"],
352352
"",
353-
"make: no targets to execute\n",
354-
ErrorCode::NoTarget { target: None }.into(),
353+
"make: parse error: *** No targets. Stop.\n\n",
354+
ErrorCode::ParserError { constraint: ParseError(vec![]) }.into(),
355355
);
356356
}
357357

make/tests/parser.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,9 @@ rule: dependency
275275
panic!("Must be preprocessed without an error")
276276
};
277277
let parsed = parse(&processed);
278-
println!("{:#?}", parsed.syntax());
279-
assert_eq!(parsed.errors, Vec::<String>::new());
280-
let node = parsed.syntax();
278+
println!("{:#?}", parsed.clone().unwrap().syntax());
279+
assert_eq!(parsed.clone().err(), None);
280+
let node = parsed.clone().unwrap().syntax();
281281
assert_eq!(
282282
format!("{:#?}", node),
283283
r#"ROOT@0..38
@@ -301,7 +301,7 @@ rule: dependency
301301
"#
302302
);
303303

304-
let root = parsed.root().clone_for_update();
304+
let root = parsed.unwrap().root().clone_for_update();
305305

306306
let mut rules = root.rules().collect::<Vec<_>>();
307307
assert_eq!(rules.len(), 1);
@@ -322,16 +322,16 @@ rule: dependency
322322
panic!("Must be preprocessed without an error")
323323
};
324324
let parsed = parse(&processed);
325-
assert_eq!(parsed.errors, vec![" *** No targets. Stop."]);
326-
let node = parsed.syntax();
325+
assert!(parsed.clone().err().is_some());
326+
let node = parsed.clone().unwrap().syntax();
327327
assert_eq!(
328328
format!("{:#?}", node),
329329
r#"ROOT@0..0
330330
ERROR@0..0
331331
"#
332332
);
333333

334-
let root = parsed.root().clone_for_update();
334+
let root = parsed.unwrap().root().clone_for_update();
335335

336336
let mut variables = root.variable_definitions().collect::<Vec<_>>();
337337
assert_eq!(variables.len(), 0);
@@ -375,8 +375,8 @@ rule: dependency
375375
376376
"#;
377377
let parsed = parse(MULTIPLE_PREREQUISITES);
378-
assert_eq!(parsed.errors, Vec::<String>::new());
379-
let node = parsed.syntax();
378+
assert_eq!(parsed.clone().err(), None);
379+
let node = parsed.clone().unwrap().syntax();
380380
assert_eq!(
381381
format!("{:#?}", node),
382382
r#"ROOT@0..40
@@ -396,7 +396,7 @@ rule: dependency
396396
NEWLINE@39..40 "\n"
397397
"#
398398
);
399-
let root = parsed.root().clone_for_update();
399+
let root = parsed.unwrap().root().clone_for_update();
400400

401401
let rule = root.rules().next().unwrap();
402402
assert_eq!(rule.targets().collect::<Vec<_>>(), vec!["rule"]);

0 commit comments

Comments
 (0)