internal struct XCTSpecificMatcherRuleExamples { static let nonTriggeringExamples = [ // True/False Example("XCTAssert(foo"), Example("XCTAssertFalse(foo)"), Example("XCTAssertTrue(foo)"), // Nil/Not nil Example("XCTAssertNil(foo)"), Example("XCTAssertNotNil(foo)"), // Equal/Not equal Example("XCTAssertEqual(foo, 2)"), Example("XCTAssertNotEqual(foo, \"false\")"), // Arrays with key words Example("XCTAssertEqual(foo, [1, 2, 3, true])"), Example("XCTAssertEqual(foo, [1, 2, 3, false])"), Example("XCTAssertEqual(foo, [1, 2, 3, nil])"), Example("XCTAssertEqual(foo, [true, nil, true, nil])"), Example("XCTAssertEqual([1, 2, 3, true], foo)"), Example("XCTAssertEqual([1, 2, 3, false], foo)"), Example("XCTAssertEqual([1, 2, 3, nil], foo)"), Example("XCTAssertEqual([true, nil, true, nil], foo)"), // Inverted logic Example("XCTAssertEqual(2, foo)"), Example("XCTAssertNotEqual(\"false\"), foo)"), Example("XCTAssertEqual(false, foo?.bar)"), Example("XCTAssertEqual(true, foo?.bar)"), // Blank spaces Example("XCTAssert( foo )"), Example("XCTAssertFalse( foo )"), Example("XCTAssertTrue( foo )"), Example("XCTAssertNil( foo )"), Example("XCTAssertNotNil( foo )"), Example("XCTAssertEqual( foo , 2 )"), Example("XCTAssertNotEqual( foo, \"false\")"), // Optionals Example("XCTAssertEqual(foo?.bar, false)"), Example("XCTAssertEqual(foo?.bar, true)"), Example("XCTAssertNil(foo?.bar)"), Example("XCTAssertNotNil(foo?.bar)"), Example("XCTAssertEqual(foo?.bar, 2)"), Example("XCTAssertNotEqual(foo?.bar, \"false\")"), // Function calls and enums Example("XCTAssertEqual(foo?.bar, toto())"), Example("XCTAssertEqual(foo?.bar, .toto(.zoo))"), Example("XCTAssertEqual(toto(), foo?.bar)"), Example("XCTAssertEqual(.toto(.zoo), foo?.bar)"), // Configurations Disabled Example("XCTAssertEqual(foo, true)", configuration: ["matchers": ["one-argument-asserts"]], excludeFromDocumentation: true), Example("XCTAssert(foo == bar)", configuration: ["matchers": ["two-argument-asserts"]], excludeFromDocumentation: true), // Skip if one operand might be a type or a tuple Example("XCTAssert(foo.self == bar)"), Example("XCTAssertTrue(type(of: foo) != Int.self)"), Example("XCTAssertTrue(a == (1, 3, 5)"), // Identity comparisons with valid usage Example("XCTAssertIdentical(foo, bar)"), Example("XCTAssertNotIdentical(foo, bar)"), Example("XCTAssert(foo.self === bar.self)"), ] static let triggeringExamples = [ // Without message Example("↓XCTAssertEqual(foo, true)"), Example("↓XCTAssertEqual(foo, false)"), Example("↓XCTAssertEqual(foo, nil)"), Example("↓XCTAssertNotEqual(foo, true)"), Example("↓XCTAssertNotEqual(foo, false)"), Example("↓XCTAssertNotEqual(foo, nil)"), // Inverted logic (just in case...) Example("↓XCTAssertEqual(true, foo)"), Example("↓XCTAssertEqual(false, foo)"), Example("↓XCTAssertEqual(nil, foo)"), Example("↓XCTAssertNotEqual(true, foo)"), Example("↓XCTAssertNotEqual(false, foo)"), Example("↓XCTAssertNotEqual(nil, foo)"), // With message Example("↓XCTAssertEqual(foo, true, \"toto\")"), Example("↓XCTAssertEqual(foo, false, \"toto\")"), Example("↓XCTAssertEqual(foo, nil, \"toto\")"), Example("↓XCTAssertNotEqual(foo, true, \"toto\")"), Example("↓XCTAssertNotEqual(foo, false, \"toto\")"), Example("↓XCTAssertNotEqual(foo, nil, \"toto\")"), Example("↓XCTAssertEqual(true, foo, \"toto\")"), Example("↓XCTAssertEqual(false, foo, \"toto\")"), Example("↓XCTAssertEqual(nil, foo, \"toto\")"), Example("↓XCTAssertNotEqual(true, foo, \"toto\")"), Example("↓XCTAssertNotEqual(false, foo, \"toto\")"), Example("↓XCTAssertNotEqual(nil, foo, \"toto\")"), // Blank spaces Example("↓XCTAssertEqual(foo,true)"), Example("↓XCTAssertEqual( foo , false )"), Example("↓XCTAssertEqual( foo , nil )"), // Arrays Example("↓XCTAssertEqual(true, [1, 2, 3, true].hasNumbers())"), Example("↓XCTAssertEqual([1, 2, 3, true].hasNumbers(), true)"), // Optionals Example("↓XCTAssertEqual(foo?.bar, nil)"), Example("↓XCTAssertNotEqual(foo?.bar, nil)"), // Weird cases Example("↓XCTAssertEqual(nil, true)"), Example("↓XCTAssertEqual(nil, false)"), Example("↓XCTAssertEqual(true, nil)"), Example("↓XCTAssertEqual(false, nil)"), Example("↓XCTAssertEqual(nil, nil)"), Example("↓XCTAssertEqual(true, true)"), Example("↓XCTAssertEqual(false, false)"), // Equality with `==` Example("↓XCTAssert(foo == bar)"), Example("↓XCTAssertTrue( foo == bar )"), Example("↓XCTAssertFalse(1 == foo)"), Example("↓XCTAssert(foo == bar, \"toto\")"), // Inequality with `!=` Example("↓XCTAssert(foo != bar)"), Example("↓XCTAssertTrue( foo != bar )"), Example("↓XCTAssertFalse(1 != foo)"), Example("↓XCTAssert(foo != bar, \"toto\")"), // Identity with `===` Example("↓XCTAssert(foo === bar)"), Example("↓XCTAssertTrue( foo === bar )"), Example("↓XCTAssertFalse(bar === foo)"), Example("↓XCTAssert(foo === bar, \"toto\")"), // Non-identity with `!==` Example("↓XCTAssert(foo !== bar)"), Example("↓XCTAssertTrue( foo !== bar )"), Example("↓XCTAssertFalse(bar !== foo)"), Example("↓XCTAssert(foo !== bar, \"toto\")"), // Comparison with `nil` Example("↓XCTAssert( foo == nil)"), Example("↓XCTAssert(nil == foo"), Example("↓XCTAssertTrue( foo != nil)"), Example("↓XCTAssertFalse(nil != foo"), Example("↓XCTAssert(foo == nil, \"toto\")"), ] }