forked from intitni/CopilotForXcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGetPreviousSuggestionTests.swift
More file actions
113 lines (89 loc) · 3.24 KB
/
GetPreviousSuggestionTests.swift
File metadata and controls
113 lines (89 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import CopilotModel
import CopilotService
import XCTest
@testable import Service
@testable import SuggestionInjector
final class GetPreviousSuggestionTests: XCTestCase {
let mock = MockSuggestionService(completions: [])
override func setUp() async throws {
await clearEnvironment()
Environment.createSuggestionService = { [unowned self] _ in self.mock }
}
func test_get_next_suggestions_without_rejecting_previous_suggestions() async throws {
let service = getService()
mock.completions = [
completion(
text: """
struct Dog {}
""",
range: .init(
start: .init(line: 7, character: 0),
end: .init(line: 7, character: 12)
)
),
completion(
text: """
struct Wolf {}
""",
range: .init(
start: .init(line: 7, character: 0),
end: .init(line: 7, character: 12)
)
),
]
let lines = [
"struct Cat {}\n",
"\n",
]
let result1 = try await service.getSuggestedCode(editorContent: .init(
content: lines.joined(),
lines: lines,
uti: "",
cursorPosition: .init(line: 0, character: 0),
tabSize: 1,
indentSize: 1,
usesTabsForIndentation: false
))!
let result1Lines = lines.applying(result1.modifications)
let result2 = try await service.getPreviousSuggestedCode(editorContent: .init(
content: result1Lines.joined(),
lines: result1Lines,
uti: "",
cursorPosition: .init(line: 3, character: 5),
tabSize: 1,
indentSize: 1,
usesTabsForIndentation: false
))!
let result2Lines = result1Lines.applying(result2.modifications)
XCTAssertEqual(result2Lines.joined(), result2.content)
XCTAssertEqual(result2.content, """
struct Cat {}
/*========== Copilot Suggestion 2/2
struct Wolf {}
*///======== End of Copilot Suggestion
""", "Previous suggestions should be removed.")
XCTAssertEqual(
result2.newCursor,
.init(line: 1, character: 0),
"The cursor was in the deleted suggestion, reset it to 1 line above the suggestion, set its col to 0"
)
let result3 = try await service.getPreviousSuggestedCode(editorContent: .init(
content: result2Lines.joined(),
lines: result2Lines,
uti: "",
cursorPosition: .init(line: 0, character: 3),
tabSize: 1,
indentSize: 1,
usesTabsForIndentation: false
))!
let result3Lines = lines.applying(result3.modifications)
XCTAssertEqual(result3.content, result3Lines.joined())
XCTAssertEqual(result3.content, """
struct Cat {}
/*========== Copilot Suggestion 1/2
struct Dog {}
*///======== End of Copilot Suggestion
""", "Cycling through the suggestions.")
XCTAssertEqual(result3.newCursor, .init(line: 0, character: 3))
}
}