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 114 115 116 117 118 119 120 121 122 123 124 125 126
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import LSPTestSupport
import LanguageServerProtocol
import SKTestSupport
import SourceKitLSP
import XCTest
final class DocumentColorTests: XCTestCase {
// MARK: - Helpers
private func performDocumentColorRequest(text: String) async throws -> [ColorInformation] {
let testClient = try await TestSourceKitLSPClient()
let uri = DocumentURI(for: .swift)
testClient.openDocument(text, uri: uri)
let request = DocumentColorRequest(textDocument: TextDocumentIdentifier(uri))
return try await testClient.send(request)
}
private func performColorPresentationRequest(
text: String,
color: Color,
range: Range<Position>
) async throws -> [ColorPresentation] {
let testClient = try await TestSourceKitLSPClient()
let uri = DocumentURI(for: .swift)
testClient.openDocument(text, uri: uri)
let request = ColorPresentationRequest(
textDocument: TextDocumentIdentifier(uri),
color: color,
range: range
)
return try await testClient.send(request)
}
// MARK: - Tests
func testEmptyText() async throws {
let colors = try await performDocumentColorRequest(text: "")
XCTAssertEqual(colors, [])
}
func testSimple() async throws {
let text = #"""
#colorLiteral(red: 0.1, green: 0.2, blue: 0.3, alpha: 0.4)
"""#
let colors = try await performDocumentColorRequest(text: text)
XCTAssertEqual(
colors,
[
ColorInformation(
range: Position(line: 0, utf16index: 0)..<Position(line: 0, utf16index: 58),
color: Color(red: 0.1, green: 0.2, blue: 0.3, alpha: 0.4)
)
]
)
}
func testWeirdWhitespace() async throws {
let text = #"""
let x = #colorLiteral(red:0.5,green:0.5,blue:0.5,alpha:0.5)
let y = #colorLiteral(
red
:
000000000000000000.5
,
green
:
0.5
,
blue
: \#t0.5, alpha:0.5
)
"""#
let colors = try await performDocumentColorRequest(text: text)
XCTAssertEqual(
colors,
[
ColorInformation(
range: Position(line: 0, utf16index: 10)..<Position(line: 0, utf16index: 61),
color: Color(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)
),
ColorInformation(
range: Position(line: 1, utf16index: 10)..<Position(line: 13, utf16index: 5),
color: Color(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)
),
]
)
}
func testPresentation() async throws {
let text = """
let x = #colorLiteral(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5);
"""
let color = Color(red: 0, green: 1, blue: 4 - .pi, alpha: 0.3)
let range = Position(line: 0, utf16index: 8)..<Position(line: 0, utf16index: 58)
let newText = """
#colorLiteral(red: \(color.red), green: \(color.green), blue: \(color.blue), alpha: \(color.alpha))
"""
let presentations = try await performColorPresentationRequest(text: text, color: color, range: range)
XCTAssertEqual(presentations.count, 1)
let presentation = presentations[0]
XCTAssertEqual(presentation.label, "Color Literal")
XCTAssertEqual(presentation.textEdit?.range, range)
XCTAssertEqual(presentation.textEdit?.newText, newText)
}
}
|