feat: V1.1 - 责任人区分
All checks were successful
序列化结构检查 / serialization-schema-check (push) Successful in 2s

This commit is contained in:
2026-08-03 17:22:53 +08:00
parent f734455d6a
commit c40e4eff61
8 changed files with 209 additions and 13 deletions

View File

@@ -0,0 +1,66 @@
package com.codechecker.cache.git;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* {@link GitDiffScanner#parseAuthorTouchedJavaFiles} 责任人过滤解析单测。
*/
class GitDiffScannerAuthorFilterTest {
@Test
void takesOnlyMatchingAuthorJavaFiles() {
Set<String> files = GitDiffScanner.parseAuthorTouchedJavaFiles(Arrays.asList(
"COMMIT Alice <alice@example.com>",
"a/src/main/java/A.java",
"a/src/main/java/Shared.java",
"COMMIT Bob <bob@example.com>",
"b/src/main/java/B.java",
"a/src/main/java/Shared.java"
), "alice");
assertEquals(Set.of(
"a/src/main/java/A.java",
"a/src/main/java/Shared.java"
), files);
}
@Test
void matchesActorAgainstEmailCaseInsensitive() {
Set<String> files = GitDiffScanner.parseAuthorTouchedJavaFiles(Arrays.asList(
"COMMIT 张三 <ZhangSan@corp.com>",
"pkg/Foo.java",
"COMMIT 李四 <lisi@corp.com>",
"pkg/Bar.java"
), "zhangsan");
assertEquals(Set.of("pkg/Foo.java"), files);
}
@Test
void skipsNonJavaAndEmptyLines() {
Set<String> files = GitDiffScanner.parseAuthorTouchedJavaFiles(Arrays.asList(
"COMMIT alice <a@x.com>",
"",
"README.md",
"src/Main.java",
"COMMIT other <o@x.com>",
"src/Other.java"
), "alice");
assertEquals(Set.of("src/Main.java"), files);
}
@Test
void emptyFilterOrLinesYieldEmpty() {
assertTrue(GitDiffScanner.parseAuthorTouchedJavaFiles(Collections.emptyList(), "alice").isEmpty());
assertTrue(GitDiffScanner.parseAuthorTouchedJavaFiles(
Collections.singletonList("COMMIT alice <a@x.com>"), "").isEmpty());
}
}