Files
SwiftLint/Tests/BuiltInRulesTests/FileTypesOrderRuleTests.swift
Danny Mösch 15b285527a Separate built-in rule tests from framework tests (#5924)
* Short names for test modules
* Lint plugins and `Package.swift` in integration tests
* Simplify and merge file groups in Bazel
* Move common functions to `TestHelpers`
2024-12-30 12:26:46 +01:00

151 lines
4.8 KiB
Swift

@testable import SwiftLintBuiltInRules
import TestHelpers
final class FileTypesOrderRuleTests: SwiftLintTestCase {
// swiftlint:disable:next function_body_length
func testFileTypesOrderReversedOrder() {
// Test with reversed `order` entries
let nonTriggeringExamples = [
Example(FileTypesOrderRuleExamples.defaultOrderParts.reversed().joined(separator: "\n\n"))
]
let triggeringExamples = [
Example("""
// Supporting Types
↓protocol TestViewControllerDelegate {
func didPressTrackedButton()
}
class TestViewController: UIViewController {}
"""),
Example("""
↓class TestViewController: UIViewController {}
// Extensions
extension TestViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
"""),
Example("""
// Supporting Types
↓protocol TestViewControllerDelegate {
func didPressTrackedButton()
}
class TestViewController: UIViewController {}
// Supporting Types
protocol TestViewControllerDelegate {
func didPressTrackedButton()
}
"""),
Example("""
↓struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View { ContentView() }
}
"""),
Example("""
↓struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}
struct ContentView_LibraryContent: LibraryContentProvider {
var views: [LibraryItem] {
LibraryItem(ContentView())
}
}
"""),
]
let reversedOrderDescription = FileTypesOrderRule.description
.with(triggeringExamples: triggeringExamples)
.with(nonTriggeringExamples: nonTriggeringExamples)
verifyRule(
reversedOrderDescription,
ruleConfiguration: [
"order": ["library_content_provider", "preview_provider", "extension", "main_type", "supporting_type"]
]
)
}
func testFileTypesOrderGroupedOrder() {
// Test with grouped `order` entries
let nonTriggeringExamples = [
Example("""
class TestViewController: UIViewController {}
// Supporting Type
protocol TestViewControllerDelegate {
func didPressTrackedButton()
}
// Extension
extension TestViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
}
// Supporting Type
protocol TestViewControllerDelegate2 {
func didPressTrackedButton()
}
// Extension
extension TestViewController: UITableViewDelegate {
func someMethod() {}
}
"""),
]
let triggeringExamples = [
Example("""
// Supporting Types
↓protocol TestViewControllerDelegate {
func didPressTrackedButton()
}
class TestViewController: UIViewController {}
"""),
Example("""
// Extensions
↓extension TestViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
class TestViewController: UIViewController {}
"""),
]
let groupedOrderDescription = FileTypesOrderRule.description
.with(triggeringExamples: triggeringExamples)
.with(nonTriggeringExamples: nonTriggeringExamples)
verifyRule(
groupedOrderDescription,
ruleConfiguration: [
"order": ["main_type", ["extension", "supporting_type"] as Any, "preview_provider"] as Any
]
)
}
}