diff options
Diffstat (limited to 'tests/basic_match.rs')
-rw-r--r-- | tests/basic_match.rs | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/tests/basic_match.rs b/tests/basic_match.rs new file mode 100644 index 0000000..2f65451 --- /dev/null +++ b/tests/basic_match.rs @@ -0,0 +1,92 @@ +/* + * This file is part of Datafu + * Copyright (C) 2021 Soni L. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +extern crate datafu; + +mod common; + +use common::Value; + +#[test] +fn test_basic_example() { + let tree = Value::M(vec![ + ("foo".into(), Value::U(1)), + ("bar".into(), Value::M(vec![ + ("baz".into(), Value::U(2)), + ].into_iter().collect())), + ].into_iter().collect()); + let pat = datafu::Pattern::<Value>::compile("->X:?$dict->Y", None).ok().unwrap(); + let mut matcher = pat.attempt_match(&tree); + let m = matcher.next(); + // TODO + todo!(); + //assert m['X'][0] == 'bar' + //assert m['Y'][0] == 'baz' + //assert m['Y'][1] == 2 +} + +#[test] +fn test_basic_2() { + let tree = Value::M(vec![ + ("projects".into(), Value::M(vec![ + ("385e734a52e13949a7a5c71827f6de920dbfea43".into(), Value::M(vec![ + ("https://soniex2.autistic.space/git-repos/ganarchy.git".into(), Value::M(vec![ + ("HEAD".into(), Value::M(vec![ + ("active".into(), Value::B(true)), + ].into_iter().collect())), + ].into_iter().collect())), + ].into_iter().collect())), + ].into_iter().collect())), + ].into_iter().collect()); + let pat = datafu::Pattern::<Value>::compile("->'projects':?$d->P/[0-9a-fA-F]{40}|[0-9a-fA-F]{64}/?:?$d->U:?$d->B", None).ok().unwrap(); + let mut matcher = pat.attempt_match(&tree); + let m = matcher.next(); + // TODO + todo!(); + //assert m['P'][0] == "385e734a52e13949a7a5c71827f6de920dbfea43" + //assert m['U'][0] == "https://soniex2.autistic.space/git-repos/ganarchy.git" + //assert m['B'][0] == "HEAD" + //assert m['B'][1] == {"active": True} +} + +#[test] +fn test_spaces() { + let tree = Value::M(vec![ + ("projects".into(), Value::M(vec![ + ("385e734a52e13949a7a5c71827f6de920dbfea43".into(), Value::M(vec![ + ("https://soniex2.autistic.space/git-repos/ganarchy.git".into(), Value::M(vec![ + ("HEAD".into(), Value::M(vec![ + ("active".into(), Value::B(true)), + ].into_iter().collect())), + ].into_iter().collect())), + ].into_iter().collect())), + ].into_iter().collect())), + ].into_iter().collect()); + let pat = datafu::Pattern::<Value>::compile("-> 'projects'? + -> commit /[0-9a-fA-F]{40}|[0-9a-fA-F]{64}/? :?$dict + -> url :?$dict + -> branch :?$dict", None).ok().unwrap(); + let mut matcher = pat.attempt_match(&tree); + let m = matcher.next(); + // TODO + todo!(); + //assert m['commit'][0] == "385e734a52e13949a7a5c71827f6de920dbfea43" + //assert m['url'][0] == "https://soniex2.autistic.space/git-repos/ganarchy.git" + //assert m['branch'][0] == "HEAD" + //assert m['branch'][1] == {"active": True} +} |