Files
SwiftFormat/Tests/Rules/InitCoderUnavailableTests.swift
2025-10-04 08:46:46 +01:00

144 lines
4.2 KiB
Swift

//
// InitCoderUnavailableTests.swift
// SwiftFormatTests
//
// Created by Facundo Menzella on 8/20/20.
// Copyright © 2024 Nick Lockwood. All rights reserved.
//
import XCTest
@testable import SwiftFormat
final class InitCoderUnavailableTests: XCTestCase {
func testInitCoderUnavailableEmptyFunction() {
let input = """
struct A: UIView {
required init?(coder aDecoder: NSCoder) {}
}
"""
let output = """
struct A: UIView {
@available(*, unavailable)
required init?(coder aDecoder: NSCoder) {}
}
"""
testFormatting(for: input, output, rule: .initCoderUnavailable,
exclude: [.unusedArguments])
}
func testInitCoderUnavailableFatalErrorNilDisabled() {
let input = """
extension Module {
final class A: UIView {
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
}
"""
let output = """
extension Module {
final class A: UIView {
@available(*, unavailable)
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
}
"""
let options = FormatOptions(initCoderNil: false)
testFormatting(for: input, output, rule: .initCoderUnavailable, options: options)
}
func testInitCoderUnavailableFatalErrorNilEnabled() {
let input = """
extension Module {
final class A: UIView {
required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
}
"""
let output = """
extension Module {
final class A: UIView {
@available(*, unavailable)
required init?(coder _: NSCoder) {
nil
}
}
}
"""
let options = FormatOptions(initCoderNil: true)
testFormatting(for: input, output, rule: .initCoderUnavailable, options: options)
}
func testInitCoderUnavailableAlreadyPresent() {
let input = """
extension Module {
final class A: UIView {
@available(*, unavailable)
required init?(coder _: NSCoder) {
fatalError()
}
}
}
"""
testFormatting(for: input, rule: .initCoderUnavailable)
}
func testInitCoderUnavailableImplemented() {
let input = """
extension Module {
final class A: UIView {
required init?(coder aCoder: NSCoder) {
aCoder.doSomething()
}
}
}
"""
testFormatting(for: input, rule: .initCoderUnavailable)
}
func testPublicInitCoderUnavailable() {
let input = """
public class Foo: UIView {
public required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
"""
let output = """
public class Foo: UIView {
@available(*, unavailable)
public required init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
"""
testFormatting(for: input, output, rule: .initCoderUnavailable)
}
func testPublicInitCoderUnavailable2() {
let input = """
public class Foo: UIView {
required public init?(coder _: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
"""
let output = """
public class Foo: UIView {
@available(*, unavailable)
required public init?(coder _: NSCoder) {
nil
}
}
"""
let options = FormatOptions(initCoderNil: true)
testFormatting(for: input, output, rule: .initCoderUnavailable,
options: options, exclude: [.modifierOrder])
}
}