summaryrefslogtreecommitdiff
path: root/src/verify.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-04-11 02:51:02 +0200
committermo8it <mo8it@proton.me>2024-04-11 02:51:02 +0200
commitfa1f239a702eb2c0b7e0115e986481156961bbc8 (patch)
tree08ac7c8638546f80ac650474dfe4126103a15e54 /src/verify.rs
parent4bb6bda9f6416e30233342e73fc9a8486faa3f98 (diff)
Remove "I AM NOT DONE" and the verify mode and add AppState
Diffstat (limited to 'src/verify.rs')
-rw-r--r--src/verify.rs85
1 files changed, 0 insertions, 85 deletions
diff --git a/src/verify.rs b/src/verify.rs
deleted file mode 100644
index cea6bdf..0000000
--- a/src/verify.rs
+++ /dev/null
@@ -1,85 +0,0 @@
-use anyhow::Result;
-use crossterm::style::{Attribute, ContentStyle, Stylize};
-use std::io::{stdout, Write};
-
-use crate::exercise::{Exercise, Mode, State};
-
-pub enum VerifyState {
- AllExercisesDone,
- Failed(&'static Exercise),
-}
-
-// Verify that the provided container of Exercise objects
-// can be compiled and run without any failures.
-// Any such failures will be reported to the end user.
-// If the Exercise being verified is a test, the verbose boolean
-// determines whether or not the test harness outputs are displayed.
-pub fn verify(
- exercises: &'static [Exercise],
- mut current_exercise_ind: usize,
-) -> Result<VerifyState> {
- while current_exercise_ind < exercises.len() {
- let exercise = &exercises[current_exercise_ind];
-
- println!(
- "Progress: {current_exercise_ind}/{} ({:.1}%)\n",
- exercises.len(),
- current_exercise_ind as f32 / exercises.len() as f32 * 100.0,
- );
-
- let output = exercise.run()?;
-
- {
- let mut stdout = stdout().lock();
- stdout.write_all(&output.stdout)?;
- stdout.write_all(&output.stderr)?;
- stdout.flush()?;
- }
-
- if !output.status.success() {
- return Ok(VerifyState::Failed(exercise));
- }
-
- println!();
- // TODO: Color
- match exercise.mode {
- Mode::Compile => println!("Successfully ran {exercise}!"),
- Mode::Test => println!("Successfully tested {exercise}!"),
- Mode::Clippy => println!("Successfully checked {exercise}!"),
- }
-
- if let State::Pending(context) = exercise.state()? {
- println!(
- "\nYou can keep working on this exercise,
-or jump into the next one by removing the {} comment:\n",
- "`I AM NOT DONE`".bold()
- );
-
- for context_line in context {
- let formatted_line = if context_line.important {
- format!("{}", context_line.line.bold())
- } else {
- context_line.line
- };
-
- println!(
- "{:>2} {} {}",
- ContentStyle {
- foreground_color: Some(crossterm::style::Color::Blue),
- background_color: None,
- underline_color: None,
- attributes: Attribute::Bold.into()
- }
- .apply(context_line.number),
- "|".blue(),
- formatted_line,
- );
- }
- return Ok(VerifyState::Failed(exercise));
- }
-
- current_exercise_ind += 1;
- }
-
- Ok(VerifyState::AllExercisesDone)
-}