From a0a65274d9ba5cba7e8aa1407709391e6c589309 Mon Sep 17 00:00:00 2001 From: Wojciech Czerski Date: Thu, 12 Oct 2017 23:18:05 +0200 Subject: [PATCH] Update documentation using jazzy --- SwiftMonkey/Documentation/Classes.html | 13 +- SwiftMonkey/Documentation/Classes/Monkey.html | 576 ++++++++---------- SwiftMonkey/Documentation/badge.svg | 1 + SwiftMonkey/Documentation/css/jazzy.css | 5 + .../Contents/Resources/Documents/index.html | 55 -- .../Resources/Documents/undocumented.json | 6 - .../.docset/Contents/Resources/docSet.dsidx | Bin 28672 -> 0 bytes SwiftMonkey/Documentation/docsets/.tgz | Bin 51876 -> 0 bytes .../Contents/Info.plist | 6 +- .../Contents/Resources/Documents/Classes.html | 13 +- .../Resources/Documents/Classes/Monkey.html | 576 ++++++++---------- .../Resources/Documents/css/highlight.css | 0 .../Resources/Documents/css/jazzy.css | 5 + .../Resources/Documents/img/carat.png | Bin .../Contents/Resources/Documents/img/dash.png | Bin .../Contents/Resources/Documents/img/gh.png | Bin .../Contents/Resources/Documents/index.html | 294 +++++++++ .../Contents/Resources/Documents/js/jazzy.js | 6 + .../Resources/Documents/js/jquery.min.js | 0 .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 28672 bytes .../Documentation/docsets/SwiftMonkey.tgz | Bin 0 -> 56375 bytes SwiftMonkey/Documentation/index.html | 255 +++++++- SwiftMonkey/Documentation/js/jazzy.js | 6 + SwiftMonkey/Documentation/search.json | 1 + SwiftMonkey/Documentation/undocumented.json | 2 +- 26 files changed, 1086 insertions(+), 735 deletions(-) create mode 100644 SwiftMonkey/Documentation/badge.svg delete mode 100644 SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/index.html delete mode 100644 SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/undocumented.json delete mode 100644 SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/docSet.dsidx delete mode 100644 SwiftMonkey/Documentation/docsets/.tgz rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Info.plist (81%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/Classes.html (89%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/Classes/Monkey.html (82%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/css/highlight.css (100%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/css/jazzy.css (98%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/img/carat.png (100%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/img/dash.png (100%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/img/gh.png (100%) create mode 100644 SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/index.html rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/js/jazzy.js (84%) rename SwiftMonkey/Documentation/docsets/{.docset => SwiftMonkey.docset}/Contents/Resources/Documents/js/jquery.min.js (100%) create mode 100644 SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/search.json create mode 100644 SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/docSet.dsidx create mode 100644 SwiftMonkey/Documentation/docsets/SwiftMonkey.tgz create mode 100644 SwiftMonkey/Documentation/search.json diff --git a/SwiftMonkey/Documentation/Classes.html b/SwiftMonkey/Documentation/Classes.html index ccda4a3..063cfca 100644 --- a/SwiftMonkey/Documentation/Classes.html +++ b/SwiftMonkey/Documentation/Classes.html @@ -13,12 +13,12 @@
-

Docs (100% documented)

+

SwiftMonkey Docs (100% documented)

@@ -49,9 +49,9 @@

Classes

  • - + - Monkey + Monkey
    @@ -72,7 +72,6 @@

    Classes

    If all you want to do is geneate some events and you do not care about the finer details, you can just use a test case like the following:

    -
    func testMonkey() {
         let application = XCUIApplication()
     
    @@ -125,8 +124,8 @@ 

    Declaration

    diff --git a/SwiftMonkey/Documentation/Classes/Monkey.html b/SwiftMonkey/Documentation/Classes/Monkey.html index 14e020a..58328c6 100644 --- a/SwiftMonkey/Documentation/Classes/Monkey.html +++ b/SwiftMonkey/Documentation/Classes/Monkey.html @@ -14,12 +14,12 @@
    -

    Docs (100% documented)

    +

    SwiftMonkey Docs (100% documented)

    @@ -60,7 +60,6 @@

    Monkey

    If all you want to do is geneate some events and you do not care about the finer details, you can just use a test case like the following:

    -
    func testMonkey() {
         let application = XCUIApplication()
     
    @@ -102,9 +101,9 @@ 

    Monkey

  • @@ -119,7 +118,6 @@

    Monkey

    There is an XCTest bug to be aware of when finding the frame to use. Here is an example of how to work around this problem:

    -
    let application = XCUIApplication()
     
     // Workaround for bug in Xcode 7.3 and later. Snapshots are not properly
    @@ -151,8 +149,8 @@ 

    Parameters

    -

    The frame to generate events in. Should be set to the size of the device being tested.

    - +

    The frame to generate events in. +Should be set to the size of the device being tested.

    @@ -165,9 +163,9 @@

    Parameters

  • @@ -185,7 +183,6 @@

    Parameters

    There is an XCTest bug to be aware of when finding the frame to use. Here is an example of how to work around this problem:

    -
    let application = XCUIApplication()
     
     // Workaround for bug in Xcode 7.3 and later. Snapshots are not properly
    @@ -217,8 +214,8 @@ 

    Parameters

    -

    The random seed to use. Each value will generate a different stream of events.

    - +

    The random seed to use. Each value +will generate a different stream of events.

    @@ -230,8 +227,8 @@

    Parameters

    -

    The frame to generate events in. Should be set to the size of the device being tested.

    - +

    The frame to generate events in. +Should be set to the size of the device being tested.

    @@ -244,9 +241,9 @@

    Parameters

  • @@ -256,14 +253,6 @@

    Parameters

    Generate a number of random events.

    -
    -

    Parameter

    - Parameter iterations: The number of random events -to generate. Does not include any fixed interval -events that may also be generated. - -
    -

    Declaration

    @@ -285,8 +274,9 @@

    Parameters

    -

    The number of random events to generate. Does not include any fixed interval events that may also be generated.

    - +

    The number of random events +to generate. Does not include any fixed interval +events that may also be generated.

    @@ -299,9 +289,9 @@

    Parameters

  • @@ -309,26 +299,46 @@

    Parameters

    -

    Generate random events forever, or until the app crashes.

    +

    Generate random events or fixed-interval events based forever, for a specific duration or until the app crashes.

    Declaration

    Swift

    -
    public func monkeyAround()
    +
    public func monkeyAround(forDuration duration: TimeInterval = .infinity)
    +
    +

    Parameters

    + + + + + + + +
    + + duration + + +
    +

    The duration for which to generate the random events. + Set to .infinity by default.

    +
    +
    +
  • @@ -353,9 +363,9 @@

    Declaration

  • @@ -380,9 +390,9 @@

    Declaration

  • @@ -413,8 +423,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -426,8 +438,8 @@

    Parameters

    -

    The block to run when this event is generated.

    - +

    The block to run when this event +is generated.

    @@ -440,9 +452,9 @@

    Parameters

  • @@ -473,8 +485,9 @@

    Parameters

    -

    How often to generate this event. One of these events will be generated after this many randomised events have been generated.

    - +

    How often to generate this +event. One of these events will be generated after +this many randomised events have been generated.

    @@ -486,8 +499,8 @@

    Parameters

    -

    The block to run when this event is generated.

    - +

    The block to run when this event +is generated.

    @@ -500,9 +513,9 @@

    Parameters

  • @@ -533,8 +546,8 @@

    Parameters

    -

    The returned value will be less than this value, and greater than or equal to zero.

    - +

    The returned value will be +less than this value, and greater than or equal to zero.

    @@ -547,9 +560,9 @@

    Parameters

  • @@ -580,8 +593,8 @@

    Parameters

    -

    The returned value will be less than this value, and greater than or equal to zero.

    - +

    The returned value will be +less than this value, and greater than or equal to zero.

    @@ -594,9 +607,9 @@

    Parameters

  • @@ -627,8 +640,8 @@

    Parameters

    -

    The returned value will be less than this value, and greater than or equal to zero.

    - +

    The returned value will be +less than this value, and greater than or equal to zero.

    @@ -641,9 +654,9 @@

    Parameters

  • @@ -668,9 +681,38 @@

    Declaration

  • +
    +
    +
    +
    +
    +

    Generate a random CGPoint inside the frame of the app, +avoiding the areas at the top and bottom of the screen +that trigger a panel pull-out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func randomPointAvoidingPanelAreas() -> CGPoint
    + +
    +
    +
    +
    +
  • +
  • +
    @@ -702,7 +744,6 @@

    Parameters

    The rect within which to pick the point.

    -
    @@ -715,9 +756,9 @@

    Parameters

  • @@ -742,9 +783,9 @@

    Declaration

  • @@ -776,8 +817,9 @@

    Parameters

    -

    The fraction of the size of the frame to use as the of the area for generated points.

    - +

    The fraction of the size of +the frame to use as the of the area for generated +points.

    @@ -790,9 +832,9 @@

    Parameters

  • @@ -821,9 +863,9 @@

    Declaration

  • @@ -851,9 +893,9 @@

    Declaration

  • @@ -864,15 +906,6 @@

    Declaration

    Add an action that generates a single tap event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -894,8 +927,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -908,9 +943,9 @@

    Parameters

  • @@ -944,8 +979,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -957,8 +994,8 @@

    Parameters

    -

    Probability that the tap event will tap multiple times. Between 0 and 1.

    - +

    Probability that +the tap event will tap multiple times. Between 0 and 1.

    @@ -970,8 +1007,8 @@

    Parameters

    -

    Probability that the tap event will use multiple fingers. Between 0 and 1.

    - +

    Probability that +the tap event will use multiple fingers. Between 0 and 1.

    @@ -983,8 +1020,8 @@

    Parameters

    -

    Probability that the tap event will be a long press. Between 0 and 1.

    - +

    Probability that +the tap event will be a long press. Between 0 and 1.

    @@ -997,9 +1034,9 @@

    Parameters

  • @@ -1010,15 +1047,6 @@

    Parameters

    Add an action that generates a drag event from one random screen position to another using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1040,8 +1068,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1054,9 +1084,9 @@

    Parameters

  • @@ -1067,15 +1097,6 @@

    Parameters

    Add an action that generates a flick event from one random screen position to another using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1097,8 +1118,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1111,9 +1134,9 @@

    Parameters

  • @@ -1124,15 +1147,6 @@

    Parameters

    Add an action that generates a pinch close gesture at a random screen position using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1154,8 +1168,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1168,9 +1184,9 @@

    Parameters

  • @@ -1181,15 +1197,6 @@

    Parameters

    Add an action that generates a pinch open gesture at a random screen position using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1211,8 +1218,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1225,9 +1234,9 @@

    Parameters

  • @@ -1239,15 +1248,6 @@

    Parameters

    at a random screen position over a random angle using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1269,8 +1269,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1283,9 +1285,9 @@

    Parameters

  • @@ -1296,15 +1298,6 @@

    Parameters

    Add an action that generates a device rotation event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1326,8 +1319,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1340,9 +1335,9 @@

    Parameters

  • @@ -1353,15 +1348,6 @@

    Parameters

    Add an action that generates a volume up click event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1383,8 +1369,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1397,9 +1385,9 @@

    Parameters

  • @@ -1410,15 +1398,6 @@

    Parameters

    Add an action that generates a volume down click event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1440,8 +1419,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1454,9 +1435,9 @@

    Parameters

  • @@ -1467,15 +1448,6 @@

    Parameters

    Add an action that generates a shake event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1497,8 +1469,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1511,9 +1485,9 @@

    Parameters

  • @@ -1524,15 +1498,6 @@

    Parameters

    Add an action that generates a lock button click event and subsequent unlock drag event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1554,8 +1519,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1572,9 +1539,9 @@

    Parameters

  • @@ -1607,8 +1574,9 @@

    Parameters

    -

    How often to generate this event. One of these events will be generated after this many randomised events have been generated.

    - +

    How often to generate this +event. One of these events will be generated after +this many randomised events have been generated.

    @@ -1620,8 +1588,8 @@

    Parameters

    -

    The XCUIApplication object for the current application.

    - +

    The XCUIApplication object +for the current application.

    @@ -1638,9 +1606,9 @@

    Parameters

  • @@ -1668,9 +1636,9 @@

    Declaration

  • @@ -1704,8 +1672,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1717,8 +1687,8 @@

    Parameters

    -

    Probability that the tap event will tap multiple times. Between 0 and 1.

    - +

    Probability that +the tap event will tap multiple times. Between 0 and 1.

    @@ -1730,8 +1700,8 @@

    Parameters

    -

    Probability that the tap event will use multiple fingers. Between 0 and 1.

    - +

    Probability that +the tap event will use multiple fingers. Between 0 and 1.

    @@ -1744,9 +1714,9 @@

    Parameters

  • @@ -1757,15 +1727,6 @@

    Parameters

    Add an action that generates a long press event using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1787,8 +1748,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1801,9 +1764,9 @@

    Parameters

  • @@ -1814,15 +1777,6 @@

    Parameters

    Add an action that generates a drag event from one random screen position to another using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1844,8 +1798,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1858,9 +1814,9 @@

    Parameters

  • @@ -1871,15 +1827,6 @@

    Parameters

    Add an action that generates a pinch close gesture at a random screen position using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1901,8 +1848,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1915,9 +1864,9 @@

    Parameters

  • @@ -1928,15 +1877,6 @@

    Parameters

    Add an action that generates a pinch open gesture at a random screen position using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1958,8 +1898,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1972,9 +1914,9 @@

    Parameters

  • @@ -1986,15 +1928,6 @@

    Parameters

    at a random screen position over a random angle using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -2016,8 +1949,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -2030,9 +1965,9 @@

    Parameters

  • @@ -2043,15 +1978,6 @@

    Parameters

    Add an action that generates a device rotation event using the private XCTest API. Does not currently work!

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -2073,8 +1999,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -2089,8 +2017,8 @@

    Parameters

    diff --git a/SwiftMonkey/Documentation/badge.svg b/SwiftMonkey/Documentation/badge.svg new file mode 100644 index 0000000..2606d80 --- /dev/null +++ b/SwiftMonkey/Documentation/badge.svg @@ -0,0 +1 @@ +documentationdocumentation100%100% \ No newline at end of file diff --git a/SwiftMonkey/Documentation/css/jazzy.css b/SwiftMonkey/Documentation/css/jazzy.css index d6d65b7..d628282 100644 --- a/SwiftMonkey/Documentation/css/jazzy.css +++ b/SwiftMonkey/Documentation/css/jazzy.css @@ -164,6 +164,11 @@ header { padding-top: 10px; } .main-content section .task-group-section .task-group:first-of-type .section-name { padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } .section { padding: 0 25px; } diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/index.html b/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/index.html deleted file mode 100644 index bf56fc9..0000000 --- a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - Reference - - - - - - - - - -
    -
    -

    Docs (100% documented)

    -
    -
    -
    - -
    -
    - -
    -
    -
    - -

    Authors

    - -
    -
    - -
    -
    - -
  • - diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/undocumented.json b/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/undocumented.json deleted file mode 100644 index ca7c5e4..0000000 --- a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/undocumented.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "warnings": [ - - ], - "source_directory": "/Users/dagren/Code/SwiftMonkey/SwiftMonkey" -} \ No newline at end of file diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/docSet.dsidx b/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/docSet.dsidx deleted file mode 100644 index d61635d8403df88ebb43fe11a77a606dd01f9fd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 zcmeHPOK{u98D3E2lHyZ-Nrn~MOk~GYCW%DSk`pJHRHZ46YP~E{8p%$=!Xzvrq6iKF z*_NF&Szny=&|A+*+*8|oI-O}R&9tXZPi^n%v@`9c?WMhBlIbo0k&6|n2S|}}x}1>& z5y1a{_!s+QzyE>EjTuFkqj%KmhNMT6pbrQF_)atm0C)lac=6Bn$AvfC+yCId0=3<2 z^9AtI*Od_7>x#S#B0t2x_=j77TYy`DTYy`DTYy`DTYy`DTYy`DTYy{O$Xnp1%R3+r z3CN?A3-W!boG+?XO_r+p;xzf9C$*TK$fl!9bJI7L($VR;Yw4A!c~o?ME=nC4jg_Sh z`NgQdRl&b2l3pCv1@FKRmOY|Nw@Wg0EVb#f6l5p9JCmm6#gqb8mrYNl7o!V{)3Xzc ztI_M})fb~gO*ETc$(p*XO`_1)9QI(F3z4sg<-L)w!ru?W(9c4N;OD{Fz?Xp)|9|`s z{AYR}`@Z&l;Qc536P)w>){}65=I-x7uD`pk3%?Ow1CQGxx>ADP>)*-jzyMrAnow+;siMSY_* zG@@OdOvU4wd&(W%{C?d0lSnpEF`0d3TS-QV$0Yj^nqRk2-;O{Fra)l8XCTOk=r!i}Oi@~w+kj)d zxm*UwnL!BFL^RKwkiz4&zO0ruH{@&Ty>jc2k}RZ#8W?c>XCTOn=z4Q-OO-Z2yS%r2 z2H0^Cf}Dt^m=ou#id@!>8>$Vk5_?H!K>1EXuq2{4n9~+jjHn$q)s6y2QFzJB&yDC%gcyijOjk8OcM%e4bdId1JGrE0vOrcPv!Z z+tO{Nr082$YhSCI`69ieq?Xqfs||nOQS!r>2Phcft@{6p>h$;b2(F0eym{)bgiztNEEXr$}C8=84ayBCqv<{vX6Hnb3brNB8)D zU>y?rZ{avx{_ii6Asw`I9U}kleFzEtCvIbc%?}dqQ*pOWMq*g7$*$9NN0gjZvxEQlR3M@Mf^+_l zsj|Dtg01tM%`bcbjtQ>=--Pd0*cp}w*p4sQGhm$mlbRViuwb_j z=l{e$Mzn(pF4%3v`M=#BCw<=t>m>cp`G2jZ!N~s~0{<61gW#fImEc)_j1s)q1&=t8 z6lRUYkFmqrOV{aL>Ms8eOFh5j{J(MjpY#7cYe{#>{|AF};N$;0{vVcr!ukKfi<0+~ z|9?vPKTa=yf}<8Tj_xSd#w6yu#{V&W|3gdsAJ?c`wdniG|GVBIaoAJ6ZO{MfIb2=f z$CuOZUI7s`ybRaj-`p#nzj|`+FTL-Eo`llDKL+mydjb#q|MoxjU+Dd5@3il8-}hS0 z_4D(&1-J#i-4>t%oMynNt@R8>M!JbyI~9EXeK>6e#mwXBNJA@m&IBpZ-zn0r{UYjt z^CG%Jc&K@78_O0FB-YeWsvX1yDk)DLPDK-1vI9xVHx_G$F|-BKB6_KAiuM!*#L3#p z)L$29*Zka$QJC2-SpU!a|9Ss^Hplz_5AfbQTx-De{~P&#!vFn&c@X(9{AqYF^jYXk@W;V{z>fk7 z{*r&V1-J#c1-J#c1-J#c1-J#c1-J!vv%u+?2jG5~2JJ9ImplOX!|dJ;gW&VE7rB}> zO diff --git a/SwiftMonkey/Documentation/docsets/.tgz b/SwiftMonkey/Documentation/docsets/.tgz deleted file mode 100644 index 2992b83935a3cb34c177aeeee2b9fa57bc9b00ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51876 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 CFBundleIdentifier - com.jazzy. + com.jazzy.swiftmonkey CFBundleName - + SwiftMonkey DocSetPlatformFamily - + swiftmonkey isDashDocset dashIndexFilePath diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/Classes.html b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/Classes.html similarity index 89% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/Classes.html rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/Classes.html index ccda4a3..063cfca 100644 --- a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/Classes.html +++ b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/Classes.html @@ -13,12 +13,12 @@
    -

    Docs (100% documented)

    +

    SwiftMonkey Docs (100% documented)

    @@ -49,9 +49,9 @@

    Classes

  • - + - Monkey + Monkey
    @@ -72,7 +72,6 @@

    Classes

    If all you want to do is geneate some events and you do not care about the finer details, you can just use a test case like the following:

    -
    func testMonkey() {
         let application = XCUIApplication()
     
    @@ -125,8 +124,8 @@ 

    Declaration

    diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/Classes/Monkey.html b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/Classes/Monkey.html similarity index 82% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/Classes/Monkey.html rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/Classes/Monkey.html index 14e020a..58328c6 100644 --- a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/Classes/Monkey.html +++ b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/Classes/Monkey.html @@ -14,12 +14,12 @@
    -

    Docs (100% documented)

    +

    SwiftMonkey Docs (100% documented)

    @@ -60,7 +60,6 @@

    Monkey

    If all you want to do is geneate some events and you do not care about the finer details, you can just use a test case like the following:

    -
    func testMonkey() {
         let application = XCUIApplication()
     
    @@ -102,9 +101,9 @@ 

    Monkey

  • @@ -119,7 +118,6 @@

    Monkey

    There is an XCTest bug to be aware of when finding the frame to use. Here is an example of how to work around this problem:

    -
    let application = XCUIApplication()
     
     // Workaround for bug in Xcode 7.3 and later. Snapshots are not properly
    @@ -151,8 +149,8 @@ 

    Parameters

    -

    The frame to generate events in. Should be set to the size of the device being tested.

    - +

    The frame to generate events in. +Should be set to the size of the device being tested.

    @@ -165,9 +163,9 @@

    Parameters

  • @@ -185,7 +183,6 @@

    Parameters

    There is an XCTest bug to be aware of when finding the frame to use. Here is an example of how to work around this problem:

    -
    let application = XCUIApplication()
     
     // Workaround for bug in Xcode 7.3 and later. Snapshots are not properly
    @@ -217,8 +214,8 @@ 

    Parameters

    -

    The random seed to use. Each value will generate a different stream of events.

    - +

    The random seed to use. Each value +will generate a different stream of events.

    @@ -230,8 +227,8 @@

    Parameters

    -

    The frame to generate events in. Should be set to the size of the device being tested.

    - +

    The frame to generate events in. +Should be set to the size of the device being tested.

    @@ -244,9 +241,9 @@

    Parameters

  • @@ -256,14 +253,6 @@

    Parameters

    Generate a number of random events.

    -
    -

    Parameter

    - Parameter iterations: The number of random events -to generate. Does not include any fixed interval -events that may also be generated. - -
    -

    Declaration

    @@ -285,8 +274,9 @@

    Parameters

    -

    The number of random events to generate. Does not include any fixed interval events that may also be generated.

    - +

    The number of random events +to generate. Does not include any fixed interval +events that may also be generated.

    @@ -299,9 +289,9 @@

    Parameters

  • @@ -309,26 +299,46 @@

    Parameters

    -

    Generate random events forever, or until the app crashes.

    +

    Generate random events or fixed-interval events based forever, for a specific duration or until the app crashes.

    Declaration

    Swift

    -
    public func monkeyAround()
    +
    public func monkeyAround(forDuration duration: TimeInterval = .infinity)
    +
    +

    Parameters

    + + + + + + + +
    + + duration + + +
    +

    The duration for which to generate the random events. + Set to .infinity by default.

    +
    +
    +
  • @@ -353,9 +363,9 @@

    Declaration

  • @@ -380,9 +390,9 @@

    Declaration

  • @@ -413,8 +423,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -426,8 +438,8 @@

    Parameters

    -

    The block to run when this event is generated.

    - +

    The block to run when this event +is generated.

    @@ -440,9 +452,9 @@

    Parameters

  • @@ -473,8 +485,9 @@

    Parameters

    -

    How often to generate this event. One of these events will be generated after this many randomised events have been generated.

    - +

    How often to generate this +event. One of these events will be generated after +this many randomised events have been generated.

    @@ -486,8 +499,8 @@

    Parameters

    -

    The block to run when this event is generated.

    - +

    The block to run when this event +is generated.

    @@ -500,9 +513,9 @@

    Parameters

  • @@ -533,8 +546,8 @@

    Parameters

    -

    The returned value will be less than this value, and greater than or equal to zero.

    - +

    The returned value will be +less than this value, and greater than or equal to zero.

    @@ -547,9 +560,9 @@

    Parameters

  • @@ -580,8 +593,8 @@

    Parameters

    -

    The returned value will be less than this value, and greater than or equal to zero.

    - +

    The returned value will be +less than this value, and greater than or equal to zero.

    @@ -594,9 +607,9 @@

    Parameters

  • @@ -627,8 +640,8 @@

    Parameters

    -

    The returned value will be less than this value, and greater than or equal to zero.

    - +

    The returned value will be +less than this value, and greater than or equal to zero.

    @@ -641,9 +654,9 @@

    Parameters

  • @@ -668,9 +681,38 @@

    Declaration

  • +
    +
    +
    +
    +
    +

    Generate a random CGPoint inside the frame of the app, +avoiding the areas at the top and bottom of the screen +that trigger a panel pull-out.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func randomPointAvoidingPanelAreas() -> CGPoint
    + +
    +
    +
    +
    +
  • +
  • +
    @@ -702,7 +744,6 @@

    Parameters

    The rect within which to pick the point.

    -
    @@ -715,9 +756,9 @@

    Parameters

  • @@ -742,9 +783,9 @@

    Declaration

  • @@ -776,8 +817,9 @@

    Parameters

    -

    The fraction of the size of the frame to use as the of the area for generated points.

    - +

    The fraction of the size of +the frame to use as the of the area for generated +points.

    @@ -790,9 +832,9 @@

    Parameters

  • @@ -821,9 +863,9 @@

    Declaration

  • @@ -851,9 +893,9 @@

    Declaration

  • @@ -864,15 +906,6 @@

    Declaration

    Add an action that generates a single tap event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -894,8 +927,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -908,9 +943,9 @@

    Parameters

  • @@ -944,8 +979,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -957,8 +994,8 @@

    Parameters

    -

    Probability that the tap event will tap multiple times. Between 0 and 1.

    - +

    Probability that +the tap event will tap multiple times. Between 0 and 1.

    @@ -970,8 +1007,8 @@

    Parameters

    -

    Probability that the tap event will use multiple fingers. Between 0 and 1.

    - +

    Probability that +the tap event will use multiple fingers. Between 0 and 1.

    @@ -983,8 +1020,8 @@

    Parameters

    -

    Probability that the tap event will be a long press. Between 0 and 1.

    - +

    Probability that +the tap event will be a long press. Between 0 and 1.

    @@ -997,9 +1034,9 @@

    Parameters

  • @@ -1010,15 +1047,6 @@

    Parameters

    Add an action that generates a drag event from one random screen position to another using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1040,8 +1068,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1054,9 +1084,9 @@

    Parameters

  • @@ -1067,15 +1097,6 @@

    Parameters

    Add an action that generates a flick event from one random screen position to another using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1097,8 +1118,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1111,9 +1134,9 @@

    Parameters

  • @@ -1124,15 +1147,6 @@

    Parameters

    Add an action that generates a pinch close gesture at a random screen position using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1154,8 +1168,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1168,9 +1184,9 @@

    Parameters

  • @@ -1181,15 +1197,6 @@

    Parameters

    Add an action that generates a pinch open gesture at a random screen position using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1211,8 +1218,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1225,9 +1234,9 @@

    Parameters

  • @@ -1239,15 +1248,6 @@

    Parameters

    at a random screen position over a random angle using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1269,8 +1269,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1283,9 +1285,9 @@

    Parameters

  • @@ -1296,15 +1298,6 @@

    Parameters

    Add an action that generates a device rotation event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1326,8 +1319,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1340,9 +1335,9 @@

    Parameters

  • @@ -1353,15 +1348,6 @@

    Parameters

    Add an action that generates a volume up click event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1383,8 +1369,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1397,9 +1385,9 @@

    Parameters

  • @@ -1410,15 +1398,6 @@

    Parameters

    Add an action that generates a volume down click event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1440,8 +1419,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1454,9 +1435,9 @@

    Parameters

  • @@ -1467,15 +1448,6 @@

    Parameters

    Add an action that generates a shake event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1497,8 +1469,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1511,9 +1485,9 @@

    Parameters

  • @@ -1524,15 +1498,6 @@

    Parameters

    Add an action that generates a lock button click event and subsequent unlock drag event using the private UIAutomation API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1554,8 +1519,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1572,9 +1539,9 @@

    Parameters

  • @@ -1607,8 +1574,9 @@

    Parameters

    -

    How often to generate this event. One of these events will be generated after this many randomised events have been generated.

    - +

    How often to generate this +event. One of these events will be generated after +this many randomised events have been generated.

    @@ -1620,8 +1588,8 @@

    Parameters

    -

    The XCUIApplication object for the current application.

    - +

    The XCUIApplication object +for the current application.

    @@ -1638,9 +1606,9 @@

    Parameters

  • @@ -1668,9 +1636,9 @@

    Declaration

  • @@ -1704,8 +1672,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1717,8 +1687,8 @@

    Parameters

    -

    Probability that the tap event will tap multiple times. Between 0 and 1.

    - +

    Probability that +the tap event will tap multiple times. Between 0 and 1.

    @@ -1730,8 +1700,8 @@

    Parameters

    -

    Probability that the tap event will use multiple fingers. Between 0 and 1.

    - +

    Probability that +the tap event will use multiple fingers. Between 0 and 1.

    @@ -1744,9 +1714,9 @@

    Parameters

  • @@ -1757,15 +1727,6 @@

    Parameters

    Add an action that generates a long press event using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1787,8 +1748,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1801,9 +1764,9 @@

    Parameters

  • @@ -1814,15 +1777,6 @@

    Parameters

    Add an action that generates a drag event from one random screen position to another using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1844,8 +1798,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1858,9 +1814,9 @@

    Parameters

  • @@ -1871,15 +1827,6 @@

    Parameters

    Add an action that generates a pinch close gesture at a random screen position using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1901,8 +1848,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1915,9 +1864,9 @@

    Parameters

  • @@ -1928,15 +1877,6 @@

    Parameters

    Add an action that generates a pinch open gesture at a random screen position using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -1958,8 +1898,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -1972,9 +1914,9 @@

    Parameters

  • @@ -1986,15 +1928,6 @@

    Parameters

    at a random screen position over a random angle using the private XCTest API.

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -2016,8 +1949,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -2030,9 +1965,9 @@

    Parameters

  • @@ -2043,15 +1978,6 @@

    Parameters

    Add an action that generates a device rotation event using the private XCTest API. Does not currently work!

    -
    -

    Parameter

    - Parameter weight: The relative probability of this -event being generated. Can be any value larger than -zero. Probabilities will be normalised to the sum -of all relative probabilities. - -
    -

    Declaration

    @@ -2073,8 +1999,10 @@

    Parameters

    -

    The relative probability of this event being generated. Can be any value larger than zero. Probabilities will be normalised to the sum of all relative probabilities.

    - +

    The relative probability of this +event being generated. Can be any value larger than +zero. Probabilities will be normalised to the sum +of all relative probabilities.

    @@ -2089,8 +2017,8 @@

    Parameters

    diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/css/highlight.css b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/css/highlight.css similarity index 100% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/css/highlight.css rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/css/highlight.css diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/css/jazzy.css b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/css/jazzy.css similarity index 98% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/css/jazzy.css rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/css/jazzy.css index d6d65b7..d628282 100644 --- a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/css/jazzy.css +++ b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/css/jazzy.css @@ -164,6 +164,11 @@ header { padding-top: 10px; } .main-content section .task-group-section .task-group:first-of-type .section-name { padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } .section { padding: 0 25px; } diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/img/carat.png b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/img/carat.png similarity index 100% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/img/carat.png rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/img/carat.png diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/img/dash.png b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/img/dash.png similarity index 100% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/img/dash.png rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/img/dash.png diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/img/gh.png b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/img/gh.png similarity index 100% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/img/gh.png rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/img/gh.png diff --git a/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/index.html b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/index.html new file mode 100644 index 0000000..d2cdddc --- /dev/null +++ b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,294 @@ + + + + SwiftMonkey Reference + + + + + + + + + +
    +
    +

    SwiftMonkey Docs (100% documented)

    +
    +
    +
    + +
    +
    + +
    +
    +
    + +

    SwiftMonkey

    + +

    This project is a framework for generating randomised user input +in iOS apps. This kind of monkey testing is useful for +stress-testing apps and finding rare crashes.

    + +

    It also contains a related framework called SwiftMonkeyPaws, which +provides visualisation of the generated events. This greatly +increases the usefulness of your randomised testing, as you can +see what touches caused any crash you may encounter.

    +

    Why Use SwiftMonkey?

    + +
      +
    • When testing your UI, it’s very easy to think about how to test +how things should work, but do you struggle to figure out +what kind of thing might not work?
    • +
    • Ever showed your app to someone who proceeded to bang away at the +screen and immediately crashed it by doing something you had never +thought of?
    • +
    • Do you want to feel a bit more confident about your app’s stability?
    • +
    • Do you have rare crashes that you just can’t reproduce?
    • +
    • Do you have memory leaks that take a long time to manifest +themselves, and require lots of UI actions?
    • +
    + +

    Randomised testing will help you with all of these!

    + +

    SwiftMonkey is inspired by and has similar goals to +UI AutoMonkey, but is integrated into the Xcode UI testing +framework, providing better opportunities to debug.

    + +

    Also, it is fun to look at:

    + +

    +

    Quick Start

    + +

    To see for yourself how this framework works, just grab the code +and open SwiftMonkeyExample/SwiftMonkeyExample.xcodeproj. Then press Cmd-U to run the UI test.

    +

    Installation

    + +

    As a high-level overview, add SwiftMonkey.framework to your +UI test target. Then add a test that creates a Monkey +object and uses it to generate events.

    + +

    Optionally, you also add the SwiftMonkeyPaws.framework to your +main app, and create a MonkeyPaws object to enable visualisation. +You probably only want to do this for debug builds, or when a +specific command line flag is used.

    +

    Requirements

    + +

    SwiftMonkey uses Swift 3.0. It has no dependencies other than +iOS itself (8.0 and up should work). SwiftMonkeyPaws doesn’t +have any dependencies, either; you can even use on its own, +without SwiftMonkey.

    +

    CocoaPods

    + +

    You can install the frameworks using CocoaPods. Assuming +that you’ve named your main app and test targets App and Tests, you +can use something like this in your Podfile:

    +
    target "App" do
    +    pod "SwiftMonkeyPaws", "~> 1.0"
    +end
    +
    +target "Tests" do
    +    pod "SwiftMonkey", "~> 1.0"
    +end
    +
    +

    Manual Installation

    + +

    Copy the SwiftMonkey and SwiftMonkeyPaws folders into your +project. Next, drag the xcodeproj files into your project.

    + +

    Then, for SwiftMonkey, add SwiftMonkey.framework as a +dependency for your test target, and add a Copy Files build +phase to copy it into Frameworks.

    + +

    For SwiftMonkeyPaws, adding SwiftMonkeyPaws.framework to the +Embedded Binaries section of your app target is enough.

    + +

    (You can also just directly link the Swift files, if you do not +want to use frameworks.)

    +

    Swift Package Manager

    + +

    As of this writing, the Swift Package Manager doesn’t support +iOS projects. SPM package files have experimentally been created, +but obviously don’t really work yet.

    +

    Usage

    +

    SwiftMonkey

    + +

    To do monkey testing, import SwiftMonkey, then create a new +test case that uses the Monkey object to configure and run +the input event generation. Here is a simple example:

    +
    func testMonkey() {
    +    let application = XCUIApplication()
    +
    +    // Workaround for bug in Xcode 7.3. Snapshots are not properly updated
    +    // when you initially call app.frame, resulting in a zero-sized rect.
    +    // Doing a random query seems to update everything properly.
    +    // TODO: Remove this when the Xcode bug is fixed!
    +    _ = application.descendants(matching: .any).element(boundBy: 0).frame
    +
    +    // Initialise the monkey tester with the current device
    +    // frame. Giving an explicit seed will make it generate
    +    // the same sequence of events on each run, and leaving it
    +    // out will generate a new sequence on each run.
    +    let monkey = Monkey(frame: application.frame)
    +    //let monkey = Monkey(seed: 123, frame: application.frame)
    +
    +    // Add actions for the monkey to perform. We just use a
    +    // default set of actions for this, which is usually enough.
    +    // Use either one of these, but maybe not both.
    +    // XCTest private actions seem to work better at the moment.
    +    // UIAutomation actions seem to work only on the simulator.
    +    monkey.addDefaultXCTestPrivateActions()
    +    //monkey.addDefaultUIAutomationActions()
    +
    +    // Occasionally, use the regular XCTest functionality
    +    // to check if an alert is shown, and click a random
    +    // button on it.
    +    monkey.addXCTestTapAlertAction(interval: 100, application: application)
    +
    +    // Run the monkey test indefinitely.
    +    monkey.monkeyAround()
    +}
    +
    + +

    The Monkey object allows you not only to add the built-in +event generators, but also any block of your +own to be executed either randomly or at set intervals. In +these blocks you can do whatever you want, including (but not +only) generate more input events.

    + +

    Documentation for this is limited at the moment, so please +refer to Monkey.swift and its extensions for examples of +how to use the more advanced functionality if you need it.

    +

    SwiftMonkeyPaws

    + +

    The simplest way to enable the visualisation in your app is to +first import SwiftMonkeyPaws, then do the following somewhere +early on in your program execution:

    +
    var paws: MonkeyPaws?
    +
    +func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    +    if CommandLine.arguments.contains("--MonkeyPaws") {
    +        paws = MonkeyPaws(view: window!)
    +    }
    +    return true
    +}
    +
    + +

    (This example uses application(_, didFinishLaunchingWithOptions), +but any time after you have a UIWindow will do. It also only +instatiates the visualisation if a certain command line flag +is passed, so that it can be enabled only for test runs.)

    + +

    This call will swizzle some methods in UIApplication to capture +UIEvents. If you would rather not do this, or if you already have +a source of UIEvents, you can pass the following option to init +to disable swizzling:

    +
    paws = MonkeyPaws(view: window!, tapUIApplication: false)
    +
    + +

    Then you can pass in events with the following call:

    +
    paws?.append(event: event) // event is UIEvent
    +
    +

    Contributing

    + +

    Feel free to file issues and send pull requests for this +project! It is very new and not overly organised yet, so be +bold and go ahead. We will sort out the details as we go along.

    + +

    Code style is currently just four-space identation and regular +Apple Swift formatting.

    + +

    Also, we have adopted the Contributor Covenant as the code +of conduct for this project:

    + +

    http://contributor-covenant.org/version/1/4/

    +

    Thanks to

    + +
      +
    • The Zalando Open Source Guild for helping get this project +off the ground.
    • +
    • João Nunes for help with documentation.
    • +
    • Jakub Mucha for bugfixing.
    • +
    +

    TODO

    +

    SwiftMonkey

    + +
      +
    • Write more documentation.
    • +
    • Add more input event actions.
    • +
    • Add randomised testing using public XCTest APIs instead of private ones. + +
        +
      • Find clickable view and click them directly instead of +clicking random locations, to compensate for the slow +event generation.
      • +
    • +
    • Fix swipe actions to avoid pulling out the top and bottom panels. (This +can cause the monkey to escape from your app, which can be problematic!)
    • +
    • Generally, find a quick way to see if the monkey manages to leave the +application.
    • +
    • Find out how to do device rotations using XCTest private API.
    • +
    • Find out why UIAutomation actions do not work on device, but only on the +simulator.
    • +
    • Investigate other methods of generating input events that do not rely +on private APIs.
    • +
    • Once Swift Package Manager has iOS support, update project +to support it properly.
    • +
    +

    SwiftMonkeyPaws

    + +
      +
    • Add more customisability for the visualisation.
    • +
    +

    SwiftMonkeyExample

    + +
      +
    • Add more UI elements, views and controls to make the example +look more interesting.
    • +
    • Maybe add some actual crashes that the monkey testing can find?
    • +
    +

    Contact

    + +

    This software was originally written by Dag Ågren +(dag.agren@zalando.fi) for Zalando SE. This email address serves +as the main contact address for this project.

    + +

    Bug reports and feature requests are more likely to be addressed +if posted as issues here on GitHub.

    +

    License

    + +

    The MIT License (MIT) Copyright © 2016 Zalando SE, https://tech.zalando.com

    + +

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    + +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    + +

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    + +
    +
    + +
    +
    + +
  • + diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/js/jazzy.js b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/js/jazzy.js similarity index 84% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/js/jazzy.js rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/js/jazzy.js index 4ff9455..3965b5f 100755 --- a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/js/jazzy.js +++ b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/js/jazzy.js @@ -38,3 +38,9 @@ $(".token").click(function(event) { } event.preventDefault(); }); + +// Dumb down quotes within code blocks that delimit strings instead of quotations +// https://github.com/realm/jazzy/issues/714 +$("code q").replaceWith(function () { + return ["\"", $(this).contents(), "\""]; +}); diff --git a/SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/js/jquery.min.js similarity index 100% rename from SwiftMonkey/Documentation/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js rename to SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/js/jquery.min.js diff --git a/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/search.json b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/search.json new file mode 100644 index 0000000..4326e3a --- /dev/null +++ b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Classes/Monkey.html#/s:11SwiftMonkey0B0CACSC6CGRectV5frame_tcfc":{"name":"init(frame:)","abstract":"

    Create a Monkey object with a randomised seed.","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0CACs6UInt32V4seed_SC6CGRectV5frametcfc":{"name":"init(seed:frame:)","abstract":"

    Create a Monkey object with a fixed seed.","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C12monkeyAroundySi10iterations_tF":{"name":"monkeyAround(iterations:)","abstract":"

    Generate a number of random events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C12monkeyAroundySd11forDuration_tF":{"name":"monkeyAround(forDuration:)","abstract":"

    Generate random events or fixed-interval events based forever, for a specific duration or until the app crashes.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C11actRandomlyyyF":{"name":"actRandomly()","abstract":"

    Generate one random event.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C12actRegularlyyyF":{"name":"actRegularly()","abstract":"

    Generate any pending fixed-interval events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C9addActionySd6weight_yyc6actiontF":{"name":"addAction(weight:action:)","abstract":"

    Add a block for generating randomised events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C9addActionySi8interval_yyc6actiontF":{"name":"addAction(interval:action:)","abstract":"

    Add a block for fixed-interval events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C9randomIntS2i8lessThan_tF":{"name":"randomInt(lessThan:)","abstract":"

    Generate a random Int.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C10randomUIntS2u8lessThan_tF":{"name":"randomUInt(lessThan:)","abstract":"

    Generate a random UInt.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C13randomCGFloat12CoreGraphics0D0VAG8lessThan_tF":{"name":"randomCGFloat(lessThan:)","abstract":"

    Generate a random CGFloat.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C11randomPointSC7CGPointVyF":{"name":"randomPoint()","abstract":"

    Generate a random CGPoint inside the frame of the app.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C29randomPointAvoidingPanelAreasSC7CGPointVyF":{"name":"randomPointAvoidingPanelAreas()","abstract":"

    Generate a random CGPoint inside the frame of the app,","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C11randomPointSC7CGPointVSC6CGRectV6inRect_tF":{"name":"randomPoint(inRect:)","abstract":"

    Generate a random CGPoint inside the given CGRect.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C10randomRectSC6CGRectVyF":{"name":"randomRect()","abstract":"

    Generate a random CGRect inside the frame of the app.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C10randomRectSC6CGRectV12CoreGraphics7CGFloatV12sizeFraction_tF":{"name":"randomRect(sizeFraction:)","abstract":"

    Generate a random CGRect inside the frame of the app,","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C21randomClusteredPointsSaySC7CGPointVGSi5count_tF":{"name":"randomClusteredPoints(count:)","abstract":"

    Generate an array of random CGPoints in a loose cluster.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C29addDefaultUIAutomationActionsyyF":{"name":"addDefaultUIAutomationActions()","abstract":"

    Add a sane default set of event generation actions","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C30addUIAutomationSingleTapActionySd6weight_tF":{"name":"addUIAutomationSingleTapAction(weight:)","abstract":"

    Add an action that generates a single tap event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C24addUIAutomationTapActionySd6weight_Sd08multipleE11ProbabilitySd0h5TouchI0Sd09longPressI0tF":{"name":"addUIAutomationTapAction(weight:multipleTapProbability:multipleTouchProbability:longPressProbability:)","abstract":"

    Add an action that generates a tap, with a possibility for","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C25addUIAutomationDragActionySd6weight_tF":{"name":"addUIAutomationDragAction(weight:)","abstract":"

    Add an action that generates a drag event from one random","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C26addUIAutomationFlickActionySd6weight_tF":{"name":"addUIAutomationFlickAction(weight:)","abstract":"

    Add an action that generates a flick event from one random","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C31addUIAutomationPinchCloseActionySd6weight_tF":{"name":"addUIAutomationPinchCloseAction(weight:)","abstract":"

    Add an action that generates a pinch close gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C30addUIAutomationPinchOpenActionySd6weight_tF":{"name":"addUIAutomationPinchOpenAction(weight:)","abstract":"

    Add an action that generates a pinch open gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C27addUIAutomationRotateActionySd6weight_tF":{"name":"addUIAutomationRotateAction(weight:)","abstract":"

    Add an action that generates a rotation gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C32addUIAutomationOrientationActionySd6weight_tF":{"name":"addUIAutomationOrientationAction(weight:)","abstract":"

    Add an action that generates a device rotation event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C34addUIAutomationClickVolumeUpActionySd6weight_tF":{"name":"addUIAutomationClickVolumeUpAction(weight:)","abstract":"

    Add an action that generates a volume up click event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C36addUIAutomationClickVolumeDownActionySd6weight_tF":{"name":"addUIAutomationClickVolumeDownAction(weight:)","abstract":"

    Add an action that generates a volume down click event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C26addUIAutomationShakeActionySd6weight_tF":{"name":"addUIAutomationShakeAction(weight:)","abstract":"

    Add an action that generates a shake event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C25addUIAutomationLockActionySd6weight_tF":{"name":"addUIAutomationLockAction(weight:)","abstract":"

    Add an action that generates a lock button click event and","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C23addXCTestTapAlertActionySi8interval_So15XCUIApplicationC11applicationtF":{"name":"addXCTestTapAlertAction(interval:application:)","abstract":"

    Add an action that checks, at a fixed interval,","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C30addDefaultXCTestPrivateActionsyyF":{"name":"addDefaultXCTestPrivateActions()","abstract":"

    Add a sane default set of event generation actions","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C18addXCTestTapActionySd6weight_Sd08multipleE11ProbabilitySd0h5TouchI0tF":{"name":"addXCTestTapAction(weight:multipleTapProbability:multipleTouchProbability:)","abstract":"

    Add an action that generates a tap, with a possibility for","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C24addXCTestLongPressActionySd6weight_tF":{"name":"addXCTestLongPressAction(weight:)","abstract":"

    Add an action that generates a long press event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C19addXCTestDragActionySd6weight_tF":{"name":"addXCTestDragAction(weight:)","abstract":"

    Add an action that generates a drag event from one random","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C25addXCTestPinchCloseActionySd6weight_tF":{"name":"addXCTestPinchCloseAction(weight:)","abstract":"

    Add an action that generates a pinch close gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C24addXCTestPinchOpenActionySd6weight_tF":{"name":"addXCTestPinchOpenAction(weight:)","abstract":"

    Add an action that generates a pinch open gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C21addXCTestRotateActionySd6weight_tF":{"name":"addXCTestRotateAction(weight:)","abstract":"

    Add an action that generates a rotation gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C26addXCTestOrientationActionySd6weight_tF":{"name":"addXCTestOrientationAction(weight:)","abstract":"

    Add an action that generates a device rotation event","parent_name":"Monkey"},"Classes/Monkey.html":{"name":"Monkey","abstract":"

    A general-purpose class for implementing randomised"},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "}} \ No newline at end of file diff --git a/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/docSet.dsidx b/SwiftMonkey/Documentation/docsets/SwiftMonkey.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..c4bc7a7b4641fd8c03c4a6553bfbb8bee6681758 GIT binary patch literal 28672 zcmeHP&2!tv6<<)|@(U#G*p7`jj%drWsM@tiDw1raZ9-F|s_~aBN{U>&^}r-7BBBTl z2ufz_kJ+9wZU2W{I@2DKQ>LB%0X}rxHq++VX)m3gI=v*v=F(jNBo`1V37|yD&T>W) z1n&Oc+lT%7;k~!{J2zxaiak=)HBpO=fg^z9zz4Ay0N^72@!_Aw$Ad5W8~@{gd|x{h#+=?)#*V_tdzrITgGB*Kz&L7z8&3G$ct?NscdP7H88fL78Nd607B&y#v7=0eu(4;c_)i!7pC0J~x!Ys;Ta# zB(Ib-#|n;jM6BnF69(u5Er-Av2=W3NwH42o#8vYl#a(JJ(HYXJ!tu8uSP@XhRz8Ct z&gzm&R&c3Ick+vs#Pm-6{3%&d^qs__rW~mWS(IOvh9`^xsSNQn}+XEpBg1-JVrnWV_Jjv^234bxCDi6hna#_~u zQ_b5-tx%%BC@YnfIaR7w>6=cM5c}wFYDG07UrbzSXpv1ODRKCl()a>VY&LaUX_0;&rD=y2;x#Ql~Gh_Mitjfa-oV9 z$(0q6+@?igZI+`D3<)UQ!f?9#YA?T@(;^Uz3uxRx*6o0ISwuOA(#}&0FBDY>i9 zpDrMiRAr2)^h1yq(7>9`@X{)tfQxbLXr8XAt{7M{MI+%QCz+(sa35al(;vebx>y{0 zw+(Ss$1{^no}5gyz_7TFJP?cuXjrbuc#@Z-;?yG*vu&qh(wXW687gC`rFRL+gVxM9 zt^;a?M}-eLeI^g-vRsO><6_DVW5lV?MaggAje5d4e;!=-)cSbB^EtKe6NBq>UlZ;R zUPONz{a)mLPE!gTlts z8_jn*nc4@14c0P^9@~I~{gX$~nXfzDuI^0#-@tPdVgH;#3=W3=A4NPQ?B7)4fa(8{ zyO6MdS{a8Az7zeA)*xa3CUURne*^*2wJc({5_acZ%jhwBE4IQ}_<#65B=q0XZl@;g z$p85#kkEe=|Hlpr!GJO^Jf8>6@pYi`@qyctN?IZu^74Azb5$}Qf{}Awh zUIBmKH~x>opT6e&KXM-w82{fP%-6gJ4T+{-#6I(|9$w)!3#9Z^}_$} z`H;NI4F&en|Nnpl76fr4PI$ipzW?}t;{D3^5&SRIq7#viBZ=^faGw7+zY_Xa=y~W| z@YCRT0)Gu$^Zx@^U>{}yW&vgaW`S4F0#uZM5iGS=u_StwKnF<6Ta)2UI4htb!qJW5 zdl5cDLM67MS>#@L3U3SOVoUDcM2w_JRKFqG256B!)Oznr74AMrBt>E)+9O)zpRdBK z>6SN2cO8|HB>Pl5mPO{E-QqVISrn#g&Sjoi%i=abi}Z87acO>AT>b~|d_S0=gMD@R z_rM>1DB@xcG_=8$Ti87|CVFHSpGlD|7ZFC4$jd_XIe9=ajt;w|0n!E!1Dn6{QnS{#yNX0J8wI0J8wI0J8wI0J8wIz-w%QQ}{G+oZ8wZvvn};1vs^J`^;7ZhMVWl8eu^_ z4=vlc00D_DYx+ie6k7IV2m%sY)|6|D1ap~pwad`5XXl%z?zRsEb1QzAp=IhI1SGbs t+4>%YmOVLVv$!o1%x#l*7g~m9&f;^1Nd!Q%%}pw;a literal 0 HcmV?d00001 diff --git a/SwiftMonkey/Documentation/docsets/SwiftMonkey.tgz b/SwiftMonkey/Documentation/docsets/SwiftMonkey.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8cf68c4a3ed13e9b391e355fd7be6f38467be34a GIT binary patch literal 56375 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 O|NaMRI~fN6U<3en7*WRn literal 0 HcmV?d00001 diff --git a/SwiftMonkey/Documentation/index.html b/SwiftMonkey/Documentation/index.html index bf56fc9..d2cdddc 100644 --- a/SwiftMonkey/Documentation/index.html +++ b/SwiftMonkey/Documentation/index.html @@ -1,7 +1,7 @@ - Reference + SwiftMonkey Reference @@ -10,17 +10,17 @@ - +

    -

    Docs (100% documented)

    +

    SwiftMonkey Docs (100% documented)

    @@ -40,13 +40,252 @@
    -

    Authors

    +

    SwiftMonkey

    + +

    This project is a framework for generating randomised user input +in iOS apps. This kind of monkey testing is useful for +stress-testing apps and finding rare crashes.

    + +

    It also contains a related framework called SwiftMonkeyPaws, which +provides visualisation of the generated events. This greatly +increases the usefulness of your randomised testing, as you can +see what touches caused any crash you may encounter.

    +

    Why Use SwiftMonkey?

    + +
      +
    • When testing your UI, it’s very easy to think about how to test +how things should work, but do you struggle to figure out +what kind of thing might not work?
    • +
    • Ever showed your app to someone who proceeded to bang away at the +screen and immediately crashed it by doing something you had never +thought of?
    • +
    • Do you want to feel a bit more confident about your app’s stability?
    • +
    • Do you have rare crashes that you just can’t reproduce?
    • +
    • Do you have memory leaks that take a long time to manifest +themselves, and require lots of UI actions?
    • +
    + +

    Randomised testing will help you with all of these!

    + +

    SwiftMonkey is inspired by and has similar goals to +UI AutoMonkey, but is integrated into the Xcode UI testing +framework, providing better opportunities to debug.

    + +

    Also, it is fun to look at:

    + +

    +

    Quick Start

    + +

    To see for yourself how this framework works, just grab the code +and open SwiftMonkeyExample/SwiftMonkeyExample.xcodeproj. Then press Cmd-U to run the UI test.

    +

    Installation

    + +

    As a high-level overview, add SwiftMonkey.framework to your +UI test target. Then add a test that creates a Monkey +object and uses it to generate events.

    + +

    Optionally, you also add the SwiftMonkeyPaws.framework to your +main app, and create a MonkeyPaws object to enable visualisation. +You probably only want to do this for debug builds, or when a +specific command line flag is used.

    +

    Requirements

    + +

    SwiftMonkey uses Swift 3.0. It has no dependencies other than +iOS itself (8.0 and up should work). SwiftMonkeyPaws doesn’t +have any dependencies, either; you can even use on its own, +without SwiftMonkey.

    +

    CocoaPods

    + +

    You can install the frameworks using CocoaPods. Assuming +that you’ve named your main app and test targets App and Tests, you +can use something like this in your Podfile:

    +
    target "App" do
    +    pod "SwiftMonkeyPaws", "~> 1.0"
    +end
    +
    +target "Tests" do
    +    pod "SwiftMonkey", "~> 1.0"
    +end
    +
    +

    Manual Installation

    + +

    Copy the SwiftMonkey and SwiftMonkeyPaws folders into your +project. Next, drag the xcodeproj files into your project.

    + +

    Then, for SwiftMonkey, add SwiftMonkey.framework as a +dependency for your test target, and add a Copy Files build +phase to copy it into Frameworks.

    + +

    For SwiftMonkeyPaws, adding SwiftMonkeyPaws.framework to the +Embedded Binaries section of your app target is enough.

    + +

    (You can also just directly link the Swift files, if you do not +want to use frameworks.)

    +

    Swift Package Manager

    + +

    As of this writing, the Swift Package Manager doesn’t support +iOS projects. SPM package files have experimentally been created, +but obviously don’t really work yet.

    +

    Usage

    +

    SwiftMonkey

    + +

    To do monkey testing, import SwiftMonkey, then create a new +test case that uses the Monkey object to configure and run +the input event generation. Here is a simple example:

    +
    func testMonkey() {
    +    let application = XCUIApplication()
    +
    +    // Workaround for bug in Xcode 7.3. Snapshots are not properly updated
    +    // when you initially call app.frame, resulting in a zero-sized rect.
    +    // Doing a random query seems to update everything properly.
    +    // TODO: Remove this when the Xcode bug is fixed!
    +    _ = application.descendants(matching: .any).element(boundBy: 0).frame
    +
    +    // Initialise the monkey tester with the current device
    +    // frame. Giving an explicit seed will make it generate
    +    // the same sequence of events on each run, and leaving it
    +    // out will generate a new sequence on each run.
    +    let monkey = Monkey(frame: application.frame)
    +    //let monkey = Monkey(seed: 123, frame: application.frame)
    +
    +    // Add actions for the monkey to perform. We just use a
    +    // default set of actions for this, which is usually enough.
    +    // Use either one of these, but maybe not both.
    +    // XCTest private actions seem to work better at the moment.
    +    // UIAutomation actions seem to work only on the simulator.
    +    monkey.addDefaultXCTestPrivateActions()
    +    //monkey.addDefaultUIAutomationActions()
    +
    +    // Occasionally, use the regular XCTest functionality
    +    // to check if an alert is shown, and click a random
    +    // button on it.
    +    monkey.addXCTestTapAlertAction(interval: 100, application: application)
    +
    +    // Run the monkey test indefinitely.
    +    monkey.monkeyAround()
    +}
    +
    + +

    The Monkey object allows you not only to add the built-in +event generators, but also any block of your +own to be executed either randomly or at set intervals. In +these blocks you can do whatever you want, including (but not +only) generate more input events.

    + +

    Documentation for this is limited at the moment, so please +refer to Monkey.swift and its extensions for examples of +how to use the more advanced functionality if you need it.

    +

    SwiftMonkeyPaws

    + +

    The simplest way to enable the visualisation in your app is to +first import SwiftMonkeyPaws, then do the following somewhere +early on in your program execution:

    +
    var paws: MonkeyPaws?
    +
    +func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    +    if CommandLine.arguments.contains("--MonkeyPaws") {
    +        paws = MonkeyPaws(view: window!)
    +    }
    +    return true
    +}
    +
    + +

    (This example uses application(_, didFinishLaunchingWithOptions), +but any time after you have a UIWindow will do. It also only +instatiates the visualisation if a certain command line flag +is passed, so that it can be enabled only for test runs.)

    + +

    This call will swizzle some methods in UIApplication to capture +UIEvents. If you would rather not do this, or if you already have +a source of UIEvents, you can pass the following option to init +to disable swizzling:

    +
    paws = MonkeyPaws(view: window!, tapUIApplication: false)
    +
    + +

    Then you can pass in events with the following call:

    +
    paws?.append(event: event) // event is UIEvent
    +
    +

    Contributing

    + +

    Feel free to file issues and send pull requests for this +project! It is very new and not overly organised yet, so be +bold and go ahead. We will sort out the details as we go along.

    + +

    Code style is currently just four-space identation and regular +Apple Swift formatting.

    + +

    Also, we have adopted the Contributor Covenant as the code +of conduct for this project:

    + +

    http://contributor-covenant.org/version/1/4/

    +

    Thanks to

    + +
      +
    • The Zalando Open Source Guild for helping get this project +off the ground.
    • +
    • João Nunes for help with documentation.
    • +
    • Jakub Mucha for bugfixing.
    • +
    +

    TODO

    +

    SwiftMonkey

    + +
      +
    • Write more documentation.
    • +
    • Add more input event actions.
    • +
    • Add randomised testing using public XCTest APIs instead of private ones. + +
        +
      • Find clickable view and click them directly instead of +clicking random locations, to compensate for the slow +event generation.
      • +
    • +
    • Fix swipe actions to avoid pulling out the top and bottom panels. (This +can cause the monkey to escape from your app, which can be problematic!)
    • +
    • Generally, find a quick way to see if the monkey manages to leave the +application.
    • +
    • Find out how to do device rotations using XCTest private API.
    • +
    • Find out why UIAutomation actions do not work on device, but only on the +simulator.
    • +
    • Investigate other methods of generating input events that do not rely +on private APIs.
    • +
    • Once Swift Package Manager has iOS support, update project +to support it properly.
    • +
    +

    SwiftMonkeyPaws

    + +
      +
    • Add more customisability for the visualisation.
    • +
    +

    SwiftMonkeyExample

    + +
      +
    • Add more UI elements, views and controls to make the example +look more interesting.
    • +
    • Maybe add some actual crashes that the monkey testing can find?
    • +
    +

    Contact

    + +

    This software was originally written by Dag Ågren +(dag.agren@zalando.fi) for Zalando SE. This email address serves +as the main contact address for this project.

    + +

    Bug reports and feature requests are more likely to be addressed +if posted as issues here on GitHub.

    +

    License

    + +

    The MIT License (MIT) Copyright © 2016 Zalando SE, https://tech.zalando.com

    + +

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    + +

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    + +

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    diff --git a/SwiftMonkey/Documentation/js/jazzy.js b/SwiftMonkey/Documentation/js/jazzy.js index 4ff9455..3965b5f 100755 --- a/SwiftMonkey/Documentation/js/jazzy.js +++ b/SwiftMonkey/Documentation/js/jazzy.js @@ -38,3 +38,9 @@ $(".token").click(function(event) { } event.preventDefault(); }); + +// Dumb down quotes within code blocks that delimit strings instead of quotations +// https://github.com/realm/jazzy/issues/714 +$("code q").replaceWith(function () { + return ["\"", $(this).contents(), "\""]; +}); diff --git a/SwiftMonkey/Documentation/search.json b/SwiftMonkey/Documentation/search.json new file mode 100644 index 0000000..4326e3a --- /dev/null +++ b/SwiftMonkey/Documentation/search.json @@ -0,0 +1 @@ +{"Classes/Monkey.html#/s:11SwiftMonkey0B0CACSC6CGRectV5frame_tcfc":{"name":"init(frame:)","abstract":"

    Create a Monkey object with a randomised seed.","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0CACs6UInt32V4seed_SC6CGRectV5frametcfc":{"name":"init(seed:frame:)","abstract":"

    Create a Monkey object with a fixed seed.","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C12monkeyAroundySi10iterations_tF":{"name":"monkeyAround(iterations:)","abstract":"

    Generate a number of random events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C12monkeyAroundySd11forDuration_tF":{"name":"monkeyAround(forDuration:)","abstract":"

    Generate random events or fixed-interval events based forever, for a specific duration or until the app crashes.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C11actRandomlyyyF":{"name":"actRandomly()","abstract":"

    Generate one random event.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C12actRegularlyyyF":{"name":"actRegularly()","abstract":"

    Generate any pending fixed-interval events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C9addActionySd6weight_yyc6actiontF":{"name":"addAction(weight:action:)","abstract":"

    Add a block for generating randomised events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C9addActionySi8interval_yyc6actiontF":{"name":"addAction(interval:action:)","abstract":"

    Add a block for fixed-interval events.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C9randomIntS2i8lessThan_tF":{"name":"randomInt(lessThan:)","abstract":"

    Generate a random Int.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C10randomUIntS2u8lessThan_tF":{"name":"randomUInt(lessThan:)","abstract":"

    Generate a random UInt.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C13randomCGFloat12CoreGraphics0D0VAG8lessThan_tF":{"name":"randomCGFloat(lessThan:)","abstract":"

    Generate a random CGFloat.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C11randomPointSC7CGPointVyF":{"name":"randomPoint()","abstract":"

    Generate a random CGPoint inside the frame of the app.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C29randomPointAvoidingPanelAreasSC7CGPointVyF":{"name":"randomPointAvoidingPanelAreas()","abstract":"

    Generate a random CGPoint inside the frame of the app,","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C11randomPointSC7CGPointVSC6CGRectV6inRect_tF":{"name":"randomPoint(inRect:)","abstract":"

    Generate a random CGPoint inside the given CGRect.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C10randomRectSC6CGRectVyF":{"name":"randomRect()","abstract":"

    Generate a random CGRect inside the frame of the app.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C10randomRectSC6CGRectV12CoreGraphics7CGFloatV12sizeFraction_tF":{"name":"randomRect(sizeFraction:)","abstract":"

    Generate a random CGRect inside the frame of the app,","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C21randomClusteredPointsSaySC7CGPointVGSi5count_tF":{"name":"randomClusteredPoints(count:)","abstract":"

    Generate an array of random CGPoints in a loose cluster.

    ","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C29addDefaultUIAutomationActionsyyF":{"name":"addDefaultUIAutomationActions()","abstract":"

    Add a sane default set of event generation actions","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C30addUIAutomationSingleTapActionySd6weight_tF":{"name":"addUIAutomationSingleTapAction(weight:)","abstract":"

    Add an action that generates a single tap event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C24addUIAutomationTapActionySd6weight_Sd08multipleE11ProbabilitySd0h5TouchI0Sd09longPressI0tF":{"name":"addUIAutomationTapAction(weight:multipleTapProbability:multipleTouchProbability:longPressProbability:)","abstract":"

    Add an action that generates a tap, with a possibility for","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C25addUIAutomationDragActionySd6weight_tF":{"name":"addUIAutomationDragAction(weight:)","abstract":"

    Add an action that generates a drag event from one random","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C26addUIAutomationFlickActionySd6weight_tF":{"name":"addUIAutomationFlickAction(weight:)","abstract":"

    Add an action that generates a flick event from one random","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C31addUIAutomationPinchCloseActionySd6weight_tF":{"name":"addUIAutomationPinchCloseAction(weight:)","abstract":"

    Add an action that generates a pinch close gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C30addUIAutomationPinchOpenActionySd6weight_tF":{"name":"addUIAutomationPinchOpenAction(weight:)","abstract":"

    Add an action that generates a pinch open gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C27addUIAutomationRotateActionySd6weight_tF":{"name":"addUIAutomationRotateAction(weight:)","abstract":"

    Add an action that generates a rotation gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C32addUIAutomationOrientationActionySd6weight_tF":{"name":"addUIAutomationOrientationAction(weight:)","abstract":"

    Add an action that generates a device rotation event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C34addUIAutomationClickVolumeUpActionySd6weight_tF":{"name":"addUIAutomationClickVolumeUpAction(weight:)","abstract":"

    Add an action that generates a volume up click event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C36addUIAutomationClickVolumeDownActionySd6weight_tF":{"name":"addUIAutomationClickVolumeDownAction(weight:)","abstract":"

    Add an action that generates a volume down click event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C26addUIAutomationShakeActionySd6weight_tF":{"name":"addUIAutomationShakeAction(weight:)","abstract":"

    Add an action that generates a shake event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C25addUIAutomationLockActionySd6weight_tF":{"name":"addUIAutomationLockAction(weight:)","abstract":"

    Add an action that generates a lock button click event and","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C23addXCTestTapAlertActionySi8interval_So15XCUIApplicationC11applicationtF":{"name":"addXCTestTapAlertAction(interval:application:)","abstract":"

    Add an action that checks, at a fixed interval,","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C30addDefaultXCTestPrivateActionsyyF":{"name":"addDefaultXCTestPrivateActions()","abstract":"

    Add a sane default set of event generation actions","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C18addXCTestTapActionySd6weight_Sd08multipleE11ProbabilitySd0h5TouchI0tF":{"name":"addXCTestTapAction(weight:multipleTapProbability:multipleTouchProbability:)","abstract":"

    Add an action that generates a tap, with a possibility for","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C24addXCTestLongPressActionySd6weight_tF":{"name":"addXCTestLongPressAction(weight:)","abstract":"

    Add an action that generates a long press event","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C19addXCTestDragActionySd6weight_tF":{"name":"addXCTestDragAction(weight:)","abstract":"

    Add an action that generates a drag event from one random","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C25addXCTestPinchCloseActionySd6weight_tF":{"name":"addXCTestPinchCloseAction(weight:)","abstract":"

    Add an action that generates a pinch close gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C24addXCTestPinchOpenActionySd6weight_tF":{"name":"addXCTestPinchOpenAction(weight:)","abstract":"

    Add an action that generates a pinch open gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C21addXCTestRotateActionySd6weight_tF":{"name":"addXCTestRotateAction(weight:)","abstract":"

    Add an action that generates a rotation gesture","parent_name":"Monkey"},"Classes/Monkey.html#/s:11SwiftMonkey0B0C26addXCTestOrientationActionySd6weight_tF":{"name":"addXCTestOrientationAction(weight:)","abstract":"

    Add an action that generates a device rotation event","parent_name":"Monkey"},"Classes/Monkey.html":{"name":"Monkey","abstract":"

    A general-purpose class for implementing randomised"},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "}} \ No newline at end of file diff --git a/SwiftMonkey/Documentation/undocumented.json b/SwiftMonkey/Documentation/undocumented.json index ca7c5e4..15a8263 100644 --- a/SwiftMonkey/Documentation/undocumented.json +++ b/SwiftMonkey/Documentation/undocumented.json @@ -2,5 +2,5 @@ "warnings": [ ], - "source_directory": "/Users/dagren/Code/SwiftMonkey/SwiftMonkey" + "source_directory": "/Users/wojciech/Documents/Projekt/Zalando/SwiftMonkey" } \ No newline at end of file