Swift3 rewriting for XCTest APIs


(Mike Ferris) #1

Swift3 rewriting for XCTest APIs

For the most part, the automatic heuristics seem to be doing the right things for Xcode’s XCTest. We have identified a few cases where we should perhaps discuss doing a little extra. Almost everything seems like it imports reasonably according to the API guidelines (https://swift.org/documentation/api-design-guidelines/). The few cases that we think need tweaking are detailed here.

These are the changes from how the API imports automatically that we are considering. I would love to hear any comments or suggestions.

addTest[Run]()

There’s a glitch in the importer that is making XCTestSuioteRun’s addTestRun: import as addTest. We’re tracking this as a bug in the importer. In the meantime, I would fix this in Xcode’s XCTest explicitly.

  Existing imported method
  XCTestSuiteRun.addTest(testRun: XCTestRun)

  Suggested new name
  XCTestSuiteRun.addTestRun(testRun: XCTestRun)

Bound(by: vs. (boundBy:

Here, the importer just isn't smart enough to detect that the prepositional phrase that really identifies the argument is "boundBy", not "by”. We’re also tracking this as a possible thing to fix in the importer. In the meantime, I would fix this in Xcode’s XCTest explicitly.

  Existing imported method
  XCUIElementQuery.elementBound(by index: UInt) -> XCUIElement

  Suggested new name
  XCUIElementQuery.element(boundBy index: UInt) -> XCUIElement

Query "matching..."

This next little family is a bit more subtle. The first two have a noun which just restates the type, so by the guidelines we would remove them. Technically the last one's noun is a role, not a type and so what the importer is doing is correct. But it feels inconsistent if we remove the type names but leave that one alone. To make it a little more consistent, the suggestion is to move identifier inside the parens as a required label so all these related functions have the same "outside the parens" part of their names.

  Existing imported method
  XCUIElementQuery.matchingPredicate(predicate: NSPredicate) -> XCUIElementQuery
  XCUIElementQuery.matchingType(elementType: XCUIElementType, identifier: String?) -> XCUIElementQuery
  XCUIElementQuery.matchingIdentifier(identifier: String) -> XCUIElementQuery

  Suggested new name
  XCUIElementQuery.matching(predicate: NSPredicate) -> XCUIElementQuery
  XCUIElementQuery.matching(elementType: XCUIElementType, identifier: String?) -> XCUIElementQuery
  XCUIElementQuery.matching(identifier identifier: String) -> XCUIElementQuery