Skip to content

Commit ce564ab

Browse files
committed
added points_for_all_tests parsing to R plugin
1 parent d3837bc commit ce564ab

File tree

1 file changed

+57
-23
lines changed

1 file changed

+57
-23
lines changed

plugins/r/src/plugin.rs

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use tmc_langs_framework::{
1313
command::TmcCommand,
1414
domain::{ExerciseDesc, RunResult, TestDesc},
1515
file_util,
16-
nom::{bytes, character, combinator, error::VerboseError, sequence, IResult},
16+
nom::{branch, bytes, character, combinator, error::VerboseError, sequence, IResult},
1717
zip::ZipArchive,
1818
LanguagePlugin, TmcError,
1919
};
@@ -152,25 +152,43 @@ impl LanguagePlugin for RPlugin {
152152
}
153153

154154
fn points_parser(i: &str) -> IResult<&str, &str, VerboseError<&str>> {
155-
combinator::map(
155+
let test_parser = sequence::delimited(
156+
sequence::tuple((
157+
bytes::complete::tag("test"),
158+
character::complete::multispace0,
159+
character::complete::char('('),
160+
bytes::complete::take_until(","),
161+
bytes::complete::take_until("\""),
162+
)),
163+
sequence::delimited(
164+
character::complete::char('"'),
165+
bytes::complete::is_not("\""),
166+
character::complete::char('"'),
167+
),
168+
sequence::tuple((
169+
character::complete::multispace0,
170+
character::complete::char(')'),
171+
)),
172+
);
173+
let points_for_all_tests_parser = sequence::delimited(
174+
sequence::tuple((
175+
bytes::complete::tag("points_for_all_tests"),
176+
character::complete::multispace0,
177+
character::complete::char('('),
178+
bytes::complete::take_until("\""),
179+
)),
156180
sequence::delimited(
157-
sequence::tuple((
158-
bytes::complete::tag("test"),
159-
character::complete::multispace0,
160-
character::complete::char('('),
161-
bytes::complete::take_until(","),
162-
bytes::complete::take_until("\""),
163-
)),
164-
sequence::delimited(
165-
character::complete::char('"'),
166-
bytes::complete::is_not("\""),
167-
character::complete::char('"'),
168-
),
169-
sequence::tuple((
170-
character::complete::multispace0,
171-
character::complete::char(')'),
172-
)),
181+
character::complete::char('"'),
182+
bytes::complete::is_not("\""),
183+
character::complete::char('"'),
173184
),
185+
sequence::tuple((
186+
character::complete::multispace0,
187+
character::complete::char(')'),
188+
)),
189+
);
190+
combinator::map(
191+
branch::alt((test_parser, points_for_all_tests_parser)),
174192
str::trim,
175193
)(i)
176194
}
@@ -481,17 +499,33 @@ test("sample", c("r1.1"), {
481499
init();
482500

483501
let temp = tempfile::tempdir().unwrap();
502+
// a file like this used to cause an error before for some reason...
484503
file_to(
485504
&temp,
486505
"tests/testthat/testExercise.R",
487506
r#"library('testthat')
488507
"#,
489508
);
490509

491-
let res = RPlugin::get_available_points(temp.path());
492-
if let Err(TmcError::PointParse(_, e)) = res {
493-
log::info!("{:#}", e);
494-
}
495-
panic!()
510+
let _points = RPlugin::get_available_points(temp.path()).unwrap();
511+
}
512+
513+
#[test]
514+
fn parses_points_for_all_tests() {
515+
init();
516+
517+
let temp = tempfile::tempdir().unwrap();
518+
file_to(
519+
&temp,
520+
"tests/testthat/testExercise.R",
521+
r#"
522+
something
523+
points_for_all_tests(c("r1"))
524+
etc
525+
"#,
526+
);
527+
528+
let points = RPlugin::get_available_points(temp.path()).unwrap();
529+
assert_eq!(points, &["r1"]);
496530
}
497531
}

0 commit comments

Comments
 (0)