test: add first tests for pattern matching
All checks were successful
Test / test (push) Successful in 3s
All checks were successful
Test / test (push) Successful in 3s
This commit is contained in:
parent
21ff321402
commit
1e2a6e1804
5 changed files with 128 additions and 4 deletions
|
@ -3,8 +3,10 @@ use std::path::Path;
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use model::{Config, FoundMarkers, Line, Marker, MarkerKind};
|
use model::{Config, FoundMarkers, Line, Marker, MarkerKind};
|
||||||
|
use patterns::{issue_pattern, marker_pattern};
|
||||||
|
|
||||||
mod model;
|
mod model;
|
||||||
|
mod patterns;
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
println!("Forgejo TODO Checker!");
|
println!("Forgejo TODO Checker!");
|
||||||
|
@ -17,10 +19,8 @@ fn main() -> Result<()> {
|
||||||
))
|
))
|
||||||
.repo(std::env::var("GITHUB_REPOSITORY").context("GITHUB_REPOSITORY")?)
|
.repo(std::env::var("GITHUB_REPOSITORY").context("GITHUB_REPOSITORY")?)
|
||||||
.server(std::env::var("GITHUB_SERVER_URL").context("GITHUB_SERVER_URL")?)
|
.server(std::env::var("GITHUB_SERVER_URL").context("GITHUB_SERVER_URL")?)
|
||||||
.prefix_pattern(regex::Regex::new(r"(#|//)\s*(TODO|FIXME)").context("prefix regex")?)
|
.prefix_pattern(marker_pattern()?)
|
||||||
.issue_pattern(
|
.issue_pattern(issue_pattern()?)
|
||||||
regex::Regex::new(r"( |)(\(|\(#)(?P<ISSUE_NUMBER>\d+)(\))").context("issue regex")?,
|
|
||||||
)
|
|
||||||
.maybe_auth_token(std::env::var("REPO_TOKEN").ok())
|
.maybe_auth_token(std::env::var("REPO_TOKEN").ok())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
16
src/patterns/mod.rs
Normal file
16
src/patterns/mod.rs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
//
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests;
|
||||||
|
|
||||||
|
use anyhow::{Context as _, Result};
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
/// The pattern to find a TODO or FIXME comment
|
||||||
|
pub fn marker_pattern() -> Result<Regex> {
|
||||||
|
regex::Regex::new(r"(#|//)\s*(TODO|FIXME)").context("prefix regex")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The pattern to find an issue number on an already found TODO or FIXME comment
|
||||||
|
pub fn issue_pattern() -> Result<Regex> {
|
||||||
|
regex::Regex::new(r"( |)(\(|\(#)(?P<ISSUE_NUMBER>\d+)(\))").context("issue regex")
|
||||||
|
}
|
33
src/patterns/tests/issue.rs
Normal file
33
src/patterns/tests/issue.rs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn when_issue_should_find_number() -> anyhow::Result<()> {
|
||||||
|
//given
|
||||||
|
let line = " a line with a // TODO: (#13) issue number";
|
||||||
|
|
||||||
|
//when
|
||||||
|
let result = issue_pattern()?.captures(line);
|
||||||
|
|
||||||
|
//then
|
||||||
|
assert!(result.is_some());
|
||||||
|
let captures = result.unwrap();
|
||||||
|
let issue_number = captures.name("ISSUE_NUMBER").unwrap().as_str();
|
||||||
|
assert_eq!(issue_number, "13");
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn when_no_issue_should_find_nothing() -> anyhow::Result<()> {
|
||||||
|
//given
|
||||||
|
let line = " a line with a // TODO: and no issue number";
|
||||||
|
|
||||||
|
//when
|
||||||
|
let result = issue_pattern()?.captures(line);
|
||||||
|
|
||||||
|
//then
|
||||||
|
assert!(result.is_none());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
70
src/patterns/tests/marker.rs
Normal file
70
src/patterns/tests/marker.rs
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn when_todo_find_marker() -> anyhow::Result<()> {
|
||||||
|
//given
|
||||||
|
let line = " a line // TODO: with a marker";
|
||||||
|
|
||||||
|
//when
|
||||||
|
let result = marker_pattern()?.find(line);
|
||||||
|
|
||||||
|
//then
|
||||||
|
assert!(result.is_some());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn when_fixme_find_marker() -> anyhow::Result<()> {
|
||||||
|
//given
|
||||||
|
let line = " a line // FIXME: with a marker";
|
||||||
|
|
||||||
|
//when
|
||||||
|
let result = marker_pattern()?.find(line);
|
||||||
|
|
||||||
|
//then
|
||||||
|
assert!(result.is_some());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn when_no_marker_find_nothing() -> anyhow::Result<()> {
|
||||||
|
//given
|
||||||
|
let line = " a line with no marker";
|
||||||
|
|
||||||
|
//when
|
||||||
|
let result = marker_pattern()?.find(line);
|
||||||
|
|
||||||
|
//then
|
||||||
|
assert!(result.is_none());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn when_invalid_todo_find_nothing() -> anyhow::Result<()> {
|
||||||
|
//given
|
||||||
|
let line = " a line TODO: with no real marker";
|
||||||
|
|
||||||
|
//when
|
||||||
|
let result = marker_pattern()?.find(line);
|
||||||
|
|
||||||
|
//then
|
||||||
|
assert!(result.is_none());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn when_invalid_fixme_find_nothing() -> anyhow::Result<()> {
|
||||||
|
//given
|
||||||
|
let line = " a line FIXME: with no real marker";
|
||||||
|
|
||||||
|
//when
|
||||||
|
let result = marker_pattern()?.find(line);
|
||||||
|
|
||||||
|
//then
|
||||||
|
assert!(result.is_none());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
5
src/patterns/tests/mod.rs
Normal file
5
src/patterns/tests/mod.rs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
//
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
mod issue;
|
||||||
|
mod marker;
|
Loading…
Reference in a new issue