/* * 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 . */ 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::::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::::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::::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} }