test-merge-lists.rs
156 lines
| 2.6 KiB
| application/rls-services+xml
|
RustLexer
|
r49874 | use similar::DiffableStr; | ||
use tempdir::TempDir; | ||||
fn run_test(input: &str) -> String { | ||||
let mut cmd = assert_cmd::Command::cargo_bin("merge-lists").unwrap(); | ||||
let temp_dir = TempDir::new("test").unwrap(); | ||||
let base_path = temp_dir.path().join("base"); | ||||
let local_path = temp_dir.path().join("local"); | ||||
let other_path = temp_dir.path().join("other"); | ||||
let rest = input.strip_prefix("\nbase:\n").unwrap(); | ||||
let mut split = rest.split("\nlocal:\n"); | ||||
std::fs::write(&base_path, split.next().unwrap()).unwrap(); | ||||
let rest = split.next().unwrap(); | ||||
let mut split = rest.split("\nother:\n"); | ||||
std::fs::write(&local_path, split.next().unwrap()).unwrap(); | ||||
std::fs::write(&other_path, split.next().unwrap()).unwrap(); | ||||
cmd.args(&[ | ||||
local_path.as_os_str(), | ||||
base_path.as_os_str(), | ||||
other_path.as_os_str(), | ||||
]) | ||||
.assert() | ||||
.success(); | ||||
let new_base_bytes = std::fs::read(&base_path).unwrap(); | ||||
let new_local_bytes = std::fs::read(&local_path).unwrap(); | ||||
let new_other_bytes = std::fs::read(&other_path).unwrap(); | ||||
// No newline before "base:" because of https://github.com/mitsuhiko/insta/issues/117 | ||||
format!( | ||||
"base:\n{}\nlocal:\n{}\nother:\n{}", | ||||
new_base_bytes.as_str().unwrap(), | ||||
new_local_bytes.as_str().unwrap(), | ||||
new_other_bytes.as_str().unwrap() | ||||
) | ||||
} | ||||
#[test] | ||||
fn test_merge_lists_basic() { | ||||
let output = run_test( | ||||
r" | ||||
base: | ||||
import lib1 | ||||
import lib2 | ||||
local: | ||||
import lib2 | ||||
import lib3 | ||||
other: | ||||
import lib3 | ||||
import lib4 | ||||
", | ||||
); | ||||
insta::assert_snapshot!(output, @r###" | ||||
base: | ||||
import lib3 | ||||
import lib4 | ||||
local: | ||||
import lib3 | ||||
import lib4 | ||||
other: | ||||
import lib3 | ||||
import lib4 | ||||
"###); | ||||
} | ||||
#[test] | ||||
fn test_merge_lists_from() { | ||||
// Test some "from x import y" statements and some non-import conflicts | ||||
// (unresolvable) | ||||
let output = run_test( | ||||
r" | ||||
base: | ||||
from . import x | ||||
1+1 | ||||
local: | ||||
from . import x | ||||
from a import b | ||||
2+2 | ||||
other: | ||||
from a import c | ||||
3+3 | ||||
", | ||||
); | ||||
insta::assert_snapshot!(output, @r###" | ||||
base: | ||||
from a import b | ||||
from a import c | ||||
1+1 | ||||
local: | ||||
from a import b | ||||
from a import c | ||||
2+2 | ||||
other: | ||||
from a import b | ||||
from a import c | ||||
3+3 | ||||
"###); | ||||
} | ||||
#[test] | ||||
fn test_merge_lists_not_sorted() { | ||||
// Test that nothing is done if the elements in the conflicting hunks are | ||||
// not sorted | ||||
let output = run_test( | ||||
r" | ||||
base: | ||||
import x | ||||
1+1 | ||||
local: | ||||
import a | ||||
import x | ||||
2+2 | ||||
other: | ||||
import z | ||||
import y | ||||
3+3 | ||||
", | ||||
); | ||||
insta::assert_snapshot!(output, @r###" | ||||
base: | ||||
import x | ||||
1+1 | ||||
local: | ||||
import a | ||||
import x | ||||
2+2 | ||||
other: | ||||
import z | ||||
import y | ||||
3+3 | ||||
"###); | ||||
} | ||||