Skip to content

Commit 733ce08

Browse files
committed
wip: update resolver tests and benches
1 parent 2971302 commit 733ce08

File tree

2 files changed

+46
-43
lines changed

2 files changed

+46
-43
lines changed

src/benches/resolver_bench.rs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use codeinput::core::resolver::find_owners_and_tags_for_file;
2-
use codeinput::core::types::{CodeownersEntry, Owner, OwnerType, Tag};
2+
use codeinput::core::types::{
3+
CodeownersEntry, CodeownersEntryMatcher, Owner, OwnerType, Tag, codeowners_entry_to_matcher,
4+
};
35
use criterion::{Criterion, criterion_group, criterion_main};
46
use std::hint::black_box;
57
use std::path::{Path, PathBuf};
@@ -15,28 +17,29 @@ fn create_test_owner(identifier: &str, owner_type: OwnerType) -> Owner {
1517
}
1618
}
1719

18-
fn create_test_codeowners_entry(
20+
fn create_test_codeowners_entry_matcher(
1921
source_file: &str, line_number: usize, pattern: &str, owners: Vec<Owner>, tags: Vec<Tag>,
20-
) -> CodeownersEntry {
21-
CodeownersEntry {
22+
) -> CodeownersEntryMatcher {
23+
let entry = CodeownersEntry {
2224
source_file: PathBuf::from(source_file),
2325
line_number,
2426
pattern: pattern.to_string(),
2527
owners,
2628
tags,
27-
}
29+
};
30+
codeowners_entry_to_matcher(&entry)
2831
}
2932

3033
fn bench_find_owners_and_tags_simple_pattern(c: &mut Criterion) {
3134
let entries = vec![
32-
create_test_codeowners_entry(
35+
create_test_codeowners_entry_matcher(
3336
"/project/CODEOWNERS",
3437
1,
3538
"*.rs",
3639
vec![create_test_owner("@rust-team", OwnerType::Team)],
3740
vec![create_test_tag("rust")],
3841
),
39-
create_test_codeowners_entry(
42+
create_test_codeowners_entry_matcher(
4043
"/project/CODEOWNERS",
4144
2,
4245
"*.js",
@@ -54,21 +57,21 @@ fn bench_find_owners_and_tags_simple_pattern(c: &mut Criterion) {
5457

5558
fn bench_find_owners_and_tags_complex_patterns(c: &mut Criterion) {
5659
let entries = vec![
57-
create_test_codeowners_entry(
60+
create_test_codeowners_entry_matcher(
5861
"/project/CODEOWNERS",
5962
1,
6063
"*",
6164
vec![create_test_owner("@global-team", OwnerType::Team)],
6265
vec![create_test_tag("global")],
6366
),
64-
create_test_codeowners_entry(
67+
create_test_codeowners_entry_matcher(
6568
"/project/CODEOWNERS",
6669
5,
6770
"src/**/*.rs",
6871
vec![create_test_owner("@rust-team", OwnerType::Team)],
6972
vec![create_test_tag("rust-source")],
7073
),
71-
create_test_codeowners_entry(
74+
create_test_codeowners_entry_matcher(
7275
"/project/CODEOWNERS",
7376
10,
7477
"src/frontend/**/*",
@@ -89,7 +92,7 @@ fn bench_find_owners_and_tags_many_entries(c: &mut Criterion) {
8992

9093
// Create many entries with different patterns
9194
for i in 0..100 {
92-
entries.push(create_test_codeowners_entry(
95+
entries.push(create_test_codeowners_entry_matcher(
9396
"/project/CODEOWNERS",
9497
i + 1,
9598
&format!("src/module_{}/**/*", i),
@@ -108,23 +111,23 @@ fn bench_find_owners_and_tags_many_entries(c: &mut Criterion) {
108111
fn bench_find_owners_and_tags_nested_codeowners(c: &mut Criterion) {
109112
let entries = vec![
110113
// Root CODEOWNERS
111-
create_test_codeowners_entry(
114+
create_test_codeowners_entry_matcher(
112115
"/project/CODEOWNERS",
113116
1,
114117
"*",
115118
vec![create_test_owner("@root-team", OwnerType::Team)],
116119
vec![create_test_tag("root")],
117120
),
118121
// Nested CODEOWNERS in src/
119-
create_test_codeowners_entry(
122+
create_test_codeowners_entry_matcher(
120123
"/project/src/CODEOWNERS",
121124
1,
122125
"*.rs",
123126
vec![create_test_owner("@rust-team", OwnerType::Team)],
124127
vec![create_test_tag("rust")],
125128
),
126129
// Nested CODEOWNERS in src/frontend/
127-
create_test_codeowners_entry(
130+
create_test_codeowners_entry_matcher(
128131
"/project/src/frontend/CODEOWNERS",
129132
1,
130133
"*.tsx",
@@ -141,7 +144,7 @@ fn bench_find_owners_and_tags_nested_codeowners(c: &mut Criterion) {
141144
}
142145

143146
fn bench_find_owners_and_tags_no_matches(c: &mut Criterion) {
144-
let entries = vec![create_test_codeowners_entry(
147+
let entries = vec![create_test_codeowners_entry_matcher(
145148
"/project/CODEOWNERS",
146149
1,
147150
"*.js",
@@ -158,14 +161,14 @@ fn bench_find_owners_and_tags_no_matches(c: &mut Criterion) {
158161

159162
fn bench_find_owners_and_tags_multiple_matches(c: &mut Criterion) {
160163
let entries = vec![
161-
create_test_codeowners_entry(
164+
create_test_codeowners_entry_matcher(
162165
"/project/CODEOWNERS",
163166
1,
164167
"*",
165168
vec![create_test_owner("@global-team", OwnerType::Team)],
166169
vec![create_test_tag("global")],
167170
),
168-
create_test_codeowners_entry(
171+
create_test_codeowners_entry_matcher(
169172
"/project/CODEOWNERS",
170173
2,
171174
"*.rs",

src/core/resolver.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ pub fn find_owners_and_tags_for_file(
8888
mod tests {
8989
use super::*;
9090
use crate::core::types::{Owner, OwnerType, Tag};
91+
use ignore::overrides::OverrideBuilder;
9192
use std::path::PathBuf;
9293

9394
fn create_test_owner(identifier: &str, owner_type: OwnerType) -> Owner {
@@ -101,15 +102,23 @@ mod tests {
101102
Tag(name.to_string())
102103
}
103104

104-
fn create_test_codeowners_entry(
105+
fn create_test_codeowners_entry_matcher(
105106
source_file: &str, line_number: usize, pattern: &str, owners: Vec<Owner>, tags: Vec<Tag>,
106-
) -> CodeownersEntry {
107-
CodeownersEntry {
108-
source_file: PathBuf::from(source_file),
107+
) -> CodeownersEntryMatcher {
108+
let source_path = PathBuf::from(source_file);
109+
let codeowners_dir = source_path.parent().unwrap();
110+
111+
let mut builder = OverrideBuilder::new(codeowners_dir);
112+
builder.add(pattern).unwrap();
113+
let override_matcher = builder.build().unwrap();
114+
115+
CodeownersEntryMatcher {
116+
source_file: source_path,
109117
line_number,
110118
pattern: pattern.to_string(),
111119
owners,
112120
tags,
121+
override_matcher,
113122
}
114123
}
115124

@@ -126,7 +135,7 @@ mod tests {
126135
fn test_find_owners_and_tags_for_file_simple_match() {
127136
let expected_owner = create_test_owner("@rust-team", OwnerType::Team);
128137
let expected_tag = create_test_tag("rust");
129-
let entries = vec![create_test_codeowners_entry(
138+
let entries = vec![create_test_codeowners_entry_matcher(
130139
"/project/CODEOWNERS",
131140
1,
132141
"*.rs",
@@ -151,14 +160,14 @@ mod tests {
151160
let src_tag = create_test_tag("source");
152161

153162
let entries = vec![
154-
create_test_codeowners_entry(
163+
create_test_codeowners_entry_matcher(
155164
"/project/CODEOWNERS",
156165
1,
157166
"*",
158167
vec![root_owner.clone()],
159168
vec![root_tag.clone()],
160169
),
161-
create_test_codeowners_entry(
170+
create_test_codeowners_entry_matcher(
162171
"/project/src/CODEOWNERS",
163172
1,
164173
"*.rs",
@@ -184,14 +193,14 @@ mod tests {
184193
let specific_tag = create_test_tag("specific");
185194

186195
let entries = vec![
187-
create_test_codeowners_entry(
196+
create_test_codeowners_entry_matcher(
188197
"/project/CODEOWNERS",
189198
1,
190199
"*",
191200
vec![general_owner.clone()],
192201
vec![general_tag.clone()],
193202
),
194-
create_test_codeowners_entry(
203+
create_test_codeowners_entry_matcher(
195204
"/project/CODEOWNERS",
196205
10,
197206
"src/*.rs",
@@ -210,23 +219,14 @@ mod tests {
210219
}
211220

212221
#[test]
213-
fn test_find_owners_and_tags_for_file_invalid_pattern() {
214-
let entries = vec![
215-
create_test_codeowners_entry(
216-
"/project/CODEOWNERS",
217-
1,
218-
"[invalid",
219-
vec![create_test_owner("@team1", OwnerType::Team)],
220-
vec![create_test_tag("tag1")],
221-
),
222-
create_test_codeowners_entry(
223-
"/project/CODEOWNERS",
224-
2,
225-
"*.rs",
226-
vec![create_test_owner("@team2", OwnerType::Team)],
227-
vec![create_test_tag("tag2")],
228-
),
229-
];
222+
fn test_find_owners_and_tags_for_file_valid_pattern() {
223+
let entries = vec![create_test_codeowners_entry_matcher(
224+
"/project/CODEOWNERS",
225+
2,
226+
"*.rs",
227+
vec![create_test_owner("@team2", OwnerType::Team)],
228+
vec![create_test_tag("tag2")],
229+
)];
230230

231231
let file_path = Path::new("/project/src/main.rs");
232232
let result = find_owners_and_tags_for_file(file_path, &entries).unwrap();

0 commit comments

Comments
 (0)