test errors
This commit is contained in:
parent
90fb2e6112
commit
502da79d42
34
src/lexer.rs
34
src/lexer.rs
@ -250,20 +250,38 @@ impl<'a> Lexer<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn lex_num(&mut self) -> TokenKind {
|
fn lex_num(&mut self) -> TokenKind {
|
||||||
let mut string = String::with_capacity(99);
|
let mut whole = String::new();
|
||||||
while let Some(c) = self.buf.peek() {
|
while let Some(c) = self.buf.peek() {
|
||||||
if !c.is_numeric() && c != &'.' {
|
if !c.is_numeric() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
let tok = self
|
let tok = self.buf.next().unwrap();
|
||||||
.buf
|
|
||||||
.next()
|
|
||||||
.expect("this is impossible because we have already peeked");
|
|
||||||
self.pos.next_char();
|
self.pos.next_char();
|
||||||
string.push(tok);
|
whole.push(tok);
|
||||||
}
|
}
|
||||||
|
|
||||||
TokenKind::Number(string)
|
let mut dec = String::new();
|
||||||
|
|
||||||
|
if self.buf.peek() == Some(&'.') {
|
||||||
|
self.buf.next();
|
||||||
|
dec.push('.');
|
||||||
|
while let Some(c) = self.buf.peek() {
|
||||||
|
if !c.is_numeric() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let tok = self.buf.next().unwrap();
|
||||||
|
self.pos.next_char();
|
||||||
|
dec.push(tok);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if dec.len() == 1 {
|
||||||
|
return TokenKind::Error("Expected digit.".into());
|
||||||
|
}
|
||||||
|
|
||||||
|
whole.push_str(&dec);
|
||||||
|
|
||||||
|
TokenKind::Number(whole)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lex_hash(&mut self) -> TokenKind {
|
fn lex_hash(&mut self) -> TokenKind {
|
||||||
|
9
tests/error.rs
Normal file
9
tests/error.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#![cfg(test)]
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
mod macros;
|
||||||
|
|
||||||
|
error!(
|
||||||
|
nothing_after_decimal,
|
||||||
|
"a {\n color: 1.;\n}\n", "Error: Expected digit."
|
||||||
|
);
|
@ -33,3 +33,17 @@ macro_rules! test {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! error {
|
||||||
|
($func:ident, $input:expr, $err:expr) => {
|
||||||
|
#[test]
|
||||||
|
#[allow(non_snake_case)]
|
||||||
|
fn $func() {
|
||||||
|
match grass::StyleSheet::new($input) {
|
||||||
|
Ok(..) => panic!("did not fail"),
|
||||||
|
Err(e) => assert_eq!($err, e.to_string().as_str()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user