test_revset: rewrite resolve_symbol() to go through normal parse/resolve paths

I'm going to change the parsing rule of name@remote, and @ will no longer be
included in a symbol identifier. I could add a separate test for remote symbols,
but I think it's better to write tests that cover both "x"@"y" and "x@y" paths.
This commit is contained in:
Yuya Nishihara 2023-08-25 10:13:47 +09:00
parent ab4d44df85
commit 81dda498e5

View file

@ -30,9 +30,9 @@ use jj_lib::op_store::{BranchTarget, RefTarget, WorkspaceId};
use jj_lib::repo::Repo;
use jj_lib::repo_path::RepoPath;
use jj_lib::revset::{
optimize, parse, DefaultSymbolResolver, Revset, RevsetAliasesMap, RevsetExpression,
RevsetFilterPredicate, RevsetParseContext, RevsetResolutionError, RevsetWorkspaceContext,
SymbolResolver as _,
optimize, parse, DefaultSymbolResolver, ResolvedExpression, Revset, RevsetAliasesMap,
RevsetExpression, RevsetFilterPredicate, RevsetParseContext, RevsetResolutionError,
RevsetWorkspaceContext,
};
use jj_lib::revset_graph::{ReverseRevsetGraphIterator, RevsetGraphEdge};
use jj_lib::settings::GitSettings;
@ -44,7 +44,18 @@ use testutils::{
};
fn resolve_symbol(repo: &dyn Repo, symbol: &str) -> Result<Vec<CommitId>, RevsetResolutionError> {
DefaultSymbolResolver::new(repo).resolve_symbol(symbol)
let context = RevsetParseContext {
aliases_map: &RevsetAliasesMap::new(),
user_email: String::new(),
workspace: None,
};
let expression = parse(symbol, &context).unwrap();
assert_matches!(*expression, RevsetExpression::CommitRef(_));
let symbol_resolver = DefaultSymbolResolver::new(repo);
match expression.resolve_user_expression(repo, &symbol_resolver)? {
ResolvedExpression::Commits(commits) => Ok(commits),
expression => panic!("symbol resolved to compound expression: {expression:?}"),
}
}
fn revset_for_commits<'index>(
@ -77,7 +88,7 @@ fn test_resolve_symbol_empty_string() {
let repo = &test_repo.repo;
assert_matches!(
resolve_symbol(repo.as_ref(), ""),
resolve_symbol(repo.as_ref(), r#""""#),
Err(RevsetResolutionError::EmptyString)
);
}