* Use uia2 backend by default if platform version is greater or equal to 6
* Allow to force set the backend to UIA1
* Add unit tests
* Tune the log message
* Print a warning message instead of changing the driver type
* Remove redundant imports
* Tune the message
* Address PR comments
* Refactored code from createSession into parseCapsForInnerDriver()
* parseCapsForInnerDriver() takes jsonwp and w3c capabilities and translates them into objects that can be accepted by the "inner driver" that it proxies to
* It adds defaultCapabilities to capabilities.firstMatch and jsonwp caps
* It finds matching caps for W3C and then creates a new W3C capabilities object that only has the valid matching one
* After parseCapsForInnerDriver() parses the JSONWP and W3C it passes the results along to the inner-driver and it's up to the inner driver to create a W3C or JSONWP session
* Add validation to W3C session creation
* Call to 'processCapabilities' does validation now so that it will match an object that passes Appium's validation rules (e.g.: platformName, deviceName required; automation name must be valid, etc...)
* Test that it accepts combo of W3C and JSONWP capabilities
* Test that it rejects invalid W3C capabilities with 400 error
* Also added 'createSession' unit test
* Stripped out unnecessary async/await from driver-specs
* Insert Appium prefixes into W3C caps
* Previously, Appium just took the W3C capabilities, processed them into a caps object and
passed them into the inner driver as
```
{
alwaysMatch: parsedCaps,
firstMatch: [{}],
}
```
* The problem with this is that all of the parsedCaps were unprefixed, and therefore the Inner
Driver complained about it
* Now, it takes the parsedCaps and calls a new method called 'insertAppiumPrefixes' on the
parsed caps like this:
```
{
alwaysMatch: {...insertAppiumPrefixes(parsedCaps)},
firstMatch: [{}],
}
```
* Refactored tests that were affected by this change
* Added tests to test insertAppiumPrefixes function
* Render commands markdown using YML
* Made directory 'commands-yml' which contains:
* .babelrc to transpile the scripts
* parse.js which renders the markdown
* template.md which is a handlebars template that the yml gets passed to
* validator.js which validates the yml data
* The rendering works by translating the yml to js, validating the js and then passing the data to template.md (which uses handlebars)
* The directory `/commands-yml/commands` gets rendered and then copied to `/docs/en/commands` as markdown
* Uses babel-node to run the script
* Uses validatejs to validate the javascript
* Template.yml is just a sample
* Infers the platform and appium support range from driver
* For example, if you put in 'xcuitest: true' it will infer that platform support is 9.3+ and Appium Version is 1.6.0
* Guard sessions and pending drivers lists
* Address review comments
* Improve session deletion
* Perform fast return if the session is not present in the sessions list
* Add MacDriver
* Add MacDriver to version map
* Add some notes about Mac
* Update README.md
* Add section about mac apps.
* Move information to running on OS X page