Skip to content

Commit

Permalink
Refactor folding tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pfoerster committed May 2, 2019
1 parent e16ec9d commit 2b887fb
Show file tree
Hide file tree
Showing 4 changed files with 199 additions and 131 deletions.
16 changes: 16 additions & 0 deletions src/feature.rs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,22 @@ impl Into<FeatureRequest<CompletionParams>> for FeatureSpec {
}
}

#[cfg(test)]
impl Into<FeatureRequest<FoldingRangeParams>> for FeatureSpec {
fn into(self) -> FeatureRequest<FoldingRangeParams> {
let params = FoldingRangeParams {
text_document: self.identifier(),
};
let (workspace, document) = self.workspace();
FeatureRequest::new(
params,
workspace,
document,
Arc::new(self.component_database),
)
}
}

#[cfg(test)]
#[macro_export]
macro_rules! test_feature {
Expand Down
163 changes: 97 additions & 66 deletions src/folding/bibtex_declaration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,94 +43,125 @@ impl BibtexDeclarationFoldingProvider {
#[cfg(test)]
mod tests {
use super::*;
use crate::feature::FeatureTester;
use crate::workspace::WorkspaceBuilder;
use futures::executor::block_on;
use crate::completion::latex::data::types::LatexComponentDatabase;
use crate::feature::FeatureSpec;
use crate::test_feature;
use lsp_types::Position;

#[test]
fn test_preamble() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.bib", "\n@preamble{\"foo\"}");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(BibtexDeclarationFoldingProvider::execute(&request));

let folding = FoldingRange {
start_line: 1,
start_character: Some(0),
end_line: 1,
end_character: Some(15),
kind: Some(FoldingRangeKind::Region),
};
assert_eq!(vec![folding], results);
let foldings = test_feature!(
BibtexDeclarationFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.bib", "\n@preamble{\"foo\"}")],
main_file: "foo.bib",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(
foldings,
vec![FoldingRange {
start_line: 1,
start_character: Some(0),
end_line: 1,
end_character: Some(15),
kind: Some(FoldingRangeKind::Region),
}]
);
}

#[test]
fn test_string() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.bib", "@string{foo = \"bar\"}");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(BibtexDeclarationFoldingProvider::execute(&request));

let folding = FoldingRange {
start_line: 0,
start_character: Some(0),
end_line: 0,
end_character: Some(19),
kind: Some(FoldingRangeKind::Region),
};
assert_eq!(vec![folding], results);
let foldings = test_feature!(
BibtexDeclarationFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.bib", "@string{foo = \"bar\"}")],
main_file: "foo.bib",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(
foldings,
vec![FoldingRange {
start_line: 0,
start_character: Some(0),
end_line: 0,
end_character: Some(19),
kind: Some(FoldingRangeKind::Region),
}]
);
}

#[test]
fn test_entry() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.bib", "@article{foo, bar = baz\n}");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(BibtexDeclarationFoldingProvider::execute(&request));

let folding = FoldingRange {
start_line: 0,
start_character: Some(0),
end_line: 1,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
};
assert_eq!(vec![folding], results);
let foldings = test_feature!(
BibtexDeclarationFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz\n}")],
main_file: "foo.bib",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(
foldings,
vec![FoldingRange {
start_line: 0,
start_character: Some(0),
end_line: 1,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
}]
);
}

#[test]
fn test_comment() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.bib", "foo");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(BibtexDeclarationFoldingProvider::execute(&request));

assert_eq!(results, Vec::new());
let foldings = test_feature!(
BibtexDeclarationFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.bib", "foo")],
main_file: "foo.bib",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(foldings, Vec::new());
}

#[test]
fn test_entry_invalid() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.bib", "@article{foo,");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(BibtexDeclarationFoldingProvider::execute(&request));

assert_eq!(results, Vec::new());
let foldings = test_feature!(
BibtexDeclarationFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.bib", "@article{foo,")],
main_file: "foo.bib",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(foldings, Vec::new());
}

#[test]
fn test_latex() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.tex", "@article{foo,");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(BibtexDeclarationFoldingProvider::execute(&request));

assert_eq!(results, Vec::new());
let foldings = test_feature!(
BibtexDeclarationFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.tex", ""),],
main_file: "foo.tex",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(foldings, Vec::new());
}
}
59 changes: 35 additions & 24 deletions src/folding/latex_environment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,36 +32,47 @@ impl LatexEnvironmentFoldingProvider {
#[cfg(test)]
mod tests {
use super::*;
use crate::feature::FeatureTester;
use crate::workspace::WorkspaceBuilder;
use futures::executor::block_on;
use crate::completion::latex::data::types::LatexComponentDatabase;
use crate::feature::FeatureSpec;
use crate::test_feature;
use lsp_types::Position;

#[test]
fn test_multiline() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.tex", "\\begin{foo}\n\\end{foo}");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(LatexEnvironmentFoldingProvider::execute(&request));

let folding = FoldingRange {
start_line: 0,
start_character: Some(11),
end_line: 1,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
};
assert_eq!(vec![folding], results);
let foldings = test_feature!(
LatexEnvironmentFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.tex", "\\begin{foo}\n\\end{foo}")],
main_file: "foo.tex",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(
foldings,
vec![FoldingRange {
start_line: 0,
start_character: Some(11),
end_line: 1,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
}]
);
}

#[test]
fn test_bibtex() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.bib", "@article{foo, bar = baz}");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(LatexEnvironmentFoldingProvider::execute(&request));

assert_eq!(results, Vec::new());
let foldings = test_feature!(
LatexEnvironmentFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
main_file: "foo.bib",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(foldings, Vec::new());
}
}
92 changes: 51 additions & 41 deletions src/folding/latex_section.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,53 +43,63 @@ impl LatexSectionFoldingProvider {
#[cfg(test)]
mod tests {
use super::*;
use crate::feature::FeatureTester;
use crate::workspace::WorkspaceBuilder;
use futures::executor::block_on;
use crate::completion::latex::data::types::LatexComponentDatabase;
use crate::feature::FeatureSpec;
use crate::test_feature;
use lsp_types::Position;

#[test]
fn test_nesting() {
let text =
"\\section{Foo}\nfoo\n\\subsection{Bar}\nbar\n\\section{Baz}\nbaz\n\\section{Qux}";

let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.tex", text);
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(LatexSectionFoldingProvider::execute(&request));

let folding1 = FoldingRange {
start_line: 0,
start_character: Some(13),
end_line: 3,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
};
let folding2 = FoldingRange {
start_line: 2,
start_character: Some(16),
end_line: 3,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
};
let folding3 = FoldingRange {
start_line: 4,
start_character: Some(13),
end_line: 5,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
};
assert_eq!(vec![folding1, folding2, folding3], results)
let foldings = test_feature!(
LatexSectionFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.tex", "\\section{Foo}\nfoo\n\\subsection{Bar}\nbar\n\\section{Baz}\nbaz\n\\section{Qux}")],
main_file: "foo.tex",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(
foldings,
vec![
FoldingRange {
start_line: 0,
start_character: Some(13),
end_line: 3,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
},
FoldingRange {
start_line: 2,
start_character: Some(16),
end_line: 3,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
},
FoldingRange {
start_line: 4,
start_character: Some(13),
end_line: 5,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
}
]
);
}

#[test]
fn test_bibtex() {
let mut builder = WorkspaceBuilder::new();
let uri = builder.document("foo.bib", "@article{foo, bar = baz}");
let request = FeatureTester::new(builder.workspace, uri, 0, 0, "").into();

let results = block_on(LatexSectionFoldingProvider::execute(&request));

assert_eq!(results, Vec::new());
let foldings = test_feature!(
LatexSectionFoldingProvider,
FeatureSpec {
files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
main_file: "foo.bib",
position: Position::default(),
new_name: "",
component_database: LatexComponentDatabase::default(),
}
);
assert_eq!(foldings, Vec::new());
}
}

0 comments on commit 2b887fb

Please sign in to comment.