Add one failing test :)

This commit is contained in:
Alex Bethel 2021-11-27 21:01:38 -07:00
parent faff343baf
commit 3e8ea9f577

View file

@ -1,5 +1,7 @@
#[derive(Debug, PartialEq)]
pub struct Url; pub struct Url;
#[derive(Debug, PartialEq)]
pub struct RGBA { pub struct RGBA {
red: u8, red: u8,
green: u8, green: u8,
@ -7,16 +9,19 @@ pub struct RGBA {
alpha: u8, alpha: u8,
} }
#[derive(Debug, PartialEq)]
pub struct Header { pub struct Header {
label: String, label: String,
level: u8, level: u8,
} }
#[derive(Debug, PartialEq)]
pub struct CodeBlock { pub struct CodeBlock {
language: String, language: String,
text: String, text: String,
} }
#[derive(Debug, PartialEq)]
pub struct StyledText { pub struct StyledText {
italic: bool, italic: bool,
bold: bool, bold: bool,
@ -25,29 +30,35 @@ pub struct StyledText {
text: String, text: String,
} }
#[derive(Debug, PartialEq)]
pub struct Blockquote { pub struct Blockquote {
level: u8, level: u8,
text: String, text: String,
} }
#[derive(Debug, PartialEq)]
pub struct Link { pub struct Link {
text: String, text: String,
url: Url, url: Url,
title: Option<String>, title: Option<String>,
} }
#[derive(Debug, PartialEq)]
pub struct Image { pub struct Image {
text: String, text: String,
image: Url, image: Url,
title: Option<String>, title: Option<String>,
link: Option<Link>, link: Option<Link>,
} }
#[derive(Debug, PartialEq)]
pub enum Node { pub enum Node {
Header(Header), Header(Header),
Paragraph(Vec<StyledText>), Paragraph(Vec<StyledText>),
HRule, HRule,
} }
#[derive(Debug, PartialEq)]
pub struct Document(Vec<Node>); pub struct Document(Vec<Node>);
// TODO: able take care of lists i am too drunk for this tonight // TODO: able take care of lists i am too drunk for this tonight
@ -59,4 +70,40 @@ pub enum ListType {
pub struct List {} pub struct List {}
pub fn parse() {} pub fn parse(source: &str) -> Document {
let lines = source.lines().collect::<Vec<_>>();
let mut document = vec![];
let mut paragraph = vec![];
for line in lines {
if line.starts_with('#') {
todo!()
} else if line.is_empty() {
document.push(paragraph.join(" "));
} else {
paragraph.push(line);
}
}
todo!()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn basic_text() {
let text = "Hello World!";
let doc = parse(text);
let doc_ref = Document(vec![Node::Paragraph(vec![StyledText {
italic: false,
bold: false,
underline: false,
color: None,
text: "Hello World!".to_string(),
}])]);
assert_eq!(doc, doc_ref);
}
}