#[macro_use]
extern crate pest;
extern crate pest_grammars;
use std::fs::File;
use std::io::Read;
use pest::Parser;
use pest_grammars::json::*;
#[test]
fn null() {
parses_to! {
parser: JsonParser,
input: "null",
rule: Rule::null,
tokens: [
null(0, 4)
]
};
}
#[test]
fn bool() {
parses_to! {
parser: JsonParser,
input: "false",
rule: Rule::bool,
tokens: [
bool(0, 5)
]
};
}
#[test]
fn number_zero() {
parses_to! {
parser: JsonParser,
input: "0",
rule: Rule::number,
tokens: [
number(0, 1)
]
};
}
#[test]
fn float() {
parses_to! {
parser: JsonParser,
input: "100.001",
rule: Rule::number,
tokens: [
number(0, 7)
]
};
}
#[test]
fn float_with_exp() {
parses_to! {
parser: JsonParser,
input: "100.001E+100",
rule: Rule::number,
tokens: [
number(0, 12)
]
};
}
#[test]
fn number_minus_zero() {
parses_to! {
parser: JsonParser,
input: "-0",
rule: Rule::number,
tokens: [
number(0, 2)
]
};
}
#[test]
fn string_with_escapes() {
parses_to! {
parser: JsonParser,
input: "\"asd\\u0000\\\"\"",
rule: Rule::string,
tokens: [
string(0, 13)
]
};
}
#[test]
fn array_empty() {
parses_to! {
parser: JsonParser,
input: "[ ]",
rule: Rule::array,
tokens: [
array(0, 3)
]
};
}
#[test]
fn array() {
parses_to! {
parser: JsonParser,
input: "[0.0e1, false, null, \"a\", [0]]",
rule: Rule::array,
tokens: [
array(0, 30, [
value(1, 6, [number(1, 6)]),
value(8, 13, [bool(8, 13)]),
value(15, 19, [null(15, 19)]),
value(21, 24, [string(21, 24)]),
value(26, 29, [
array(26, 29, [
value(27, 28, [number(27, 28)])
])
])
])
]
};
}
#[test]
fn object() {
parses_to! {
parser: JsonParser,
input: "{\"a\" : 3, \"b\" : [{}, 3]}",
rule: Rule::object,
tokens: [
object(0, 24, [
pair(1, 8, [
string(1, 4),
value(7, 8, [number(7, 8)])
]),
pair(10, 23, [
string(10, 13),
value(16, 23, [
array(16, 23, [
value(17, 19, [object(17, 19)]),
value(21, 22, [number(21, 22)])
])
])
])
])
]
};
}
#[test]
fn examples() {
let mut file = File::open("tests/examples.json").unwrap();
let mut data = String::new();
file.read_to_string(&mut data).unwrap();
JsonParser::parse_str(Rule::json, &data).unwrap();
}