173 lines
7.1 KiB
JavaScript
173 lines
7.1 KiB
JavaScript
|
|
import { getXctestrunFilePath, getAdditionalRunContent, getXctestrunFileName } from '../../lib/utils';
|
||
|
|
import { PLATFORM_NAME_IOS, PLATFORM_NAME_TVOS } from '../../lib/constants';
|
||
|
|
import { withMocks } from '@appium/test-support';
|
||
|
|
import { fs } from '@appium/support';
|
||
|
|
import path from 'path';
|
||
|
|
import { fail } from 'assert';
|
||
|
|
import { arch } from 'os';
|
||
|
|
|
||
|
|
function get_arch() {
|
||
|
|
return arch() === 'arm64' ? 'arm64' : 'x86_64';
|
||
|
|
}
|
||
|
|
|
||
|
|
describe('utils', function () {
|
||
|
|
let chai;
|
||
|
|
|
||
|
|
before(async function() {
|
||
|
|
chai = await import('chai');
|
||
|
|
const chaiAsPromised = await import('chai-as-promised');
|
||
|
|
|
||
|
|
chai.should();
|
||
|
|
chai.use(chaiAsPromised.default);
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('#getXctestrunFilePath', withMocks({fs}, function (mocks) {
|
||
|
|
const platformVersion = '12.0';
|
||
|
|
const sdkVersion = '12.2';
|
||
|
|
const udid = 'xxxxxyyyyyyzzzzzz';
|
||
|
|
const bootstrapPath = 'path/to/data';
|
||
|
|
const platformName = PLATFORM_NAME_IOS;
|
||
|
|
|
||
|
|
afterEach(function () {
|
||
|
|
mocks.verify();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return sdk based path with udid', async function () {
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/${udid}_${sdkVersion}.xctestrun`))
|
||
|
|
.returns(true);
|
||
|
|
mocks.fs.expects('copyFile')
|
||
|
|
.never();
|
||
|
|
const deviceInfo = {isRealDevice: true, udid, platformVersion, platformName};
|
||
|
|
await getXctestrunFilePath(deviceInfo, sdkVersion, bootstrapPath)
|
||
|
|
.should.eventually.equal(path.resolve(`${bootstrapPath}/${udid}_${sdkVersion}.xctestrun`));
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return sdk based path without udid, copy them', async function () {
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/${udid}_${sdkVersion}.xctestrun`))
|
||
|
|
.returns(false);
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/WebDriverAgentRunner_iphoneos${sdkVersion}-arm64.xctestrun`))
|
||
|
|
.returns(true);
|
||
|
|
mocks.fs.expects('copyFile')
|
||
|
|
.withExactArgs(
|
||
|
|
path.resolve(`${bootstrapPath}/WebDriverAgentRunner_iphoneos${sdkVersion}-arm64.xctestrun`),
|
||
|
|
path.resolve(`${bootstrapPath}/${udid}_${sdkVersion}.xctestrun`)
|
||
|
|
)
|
||
|
|
.returns(true);
|
||
|
|
const deviceInfo = {isRealDevice: true, udid, platformVersion};
|
||
|
|
await getXctestrunFilePath(deviceInfo, sdkVersion, bootstrapPath)
|
||
|
|
.should.eventually.equal(path.resolve(`${bootstrapPath}/${udid}_${sdkVersion}.xctestrun`));
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return platform based path', async function () {
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/${udid}_${sdkVersion}.xctestrun`))
|
||
|
|
.returns(false);
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/WebDriverAgentRunner_iphonesimulator${sdkVersion}-${get_arch()}.xctestrun`))
|
||
|
|
.returns(false);
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/${udid}_${platformVersion}.xctestrun`))
|
||
|
|
.returns(true);
|
||
|
|
mocks.fs.expects('copyFile')
|
||
|
|
.never();
|
||
|
|
const deviceInfo = {isRealDevice: false, udid, platformVersion};
|
||
|
|
await getXctestrunFilePath(deviceInfo, sdkVersion, bootstrapPath)
|
||
|
|
.should.eventually.equal(path.resolve(`${bootstrapPath}/${udid}_${platformVersion}.xctestrun`));
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return platform based path without udid, copy them', async function () {
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/${udid}_${sdkVersion}.xctestrun`))
|
||
|
|
.returns(false);
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/WebDriverAgentRunner_iphonesimulator${sdkVersion}-${get_arch()}.xctestrun`))
|
||
|
|
.returns(false);
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/${udid}_${platformVersion}.xctestrun`))
|
||
|
|
.returns(false);
|
||
|
|
mocks.fs.expects('exists')
|
||
|
|
.withExactArgs(path.resolve(`${bootstrapPath}/WebDriverAgentRunner_iphonesimulator${platformVersion}-${get_arch()}.xctestrun`))
|
||
|
|
.returns(true);
|
||
|
|
mocks.fs.expects('copyFile')
|
||
|
|
.withExactArgs(
|
||
|
|
path.resolve(`${bootstrapPath}/WebDriverAgentRunner_iphonesimulator${platformVersion}-${get_arch()}.xctestrun`),
|
||
|
|
path.resolve(`${bootstrapPath}/${udid}_${platformVersion}.xctestrun`)
|
||
|
|
)
|
||
|
|
.returns(true);
|
||
|
|
|
||
|
|
const deviceInfo = {isRealDevice: false, udid, platformVersion};
|
||
|
|
await getXctestrunFilePath(deviceInfo, sdkVersion, bootstrapPath)
|
||
|
|
.should.eventually.equal(path.resolve(`${bootstrapPath}/${udid}_${platformVersion}.xctestrun`));
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should raise an exception because of no files', async function () {
|
||
|
|
const expected = path.resolve(`${bootstrapPath}/WebDriverAgentRunner_iphonesimulator${sdkVersion}-${get_arch()}.xctestrun`);
|
||
|
|
mocks.fs.expects('exists').exactly(4).returns(false);
|
||
|
|
|
||
|
|
const deviceInfo = {isRealDevice: false, udid, platformVersion};
|
||
|
|
try {
|
||
|
|
await getXctestrunFilePath(deviceInfo, sdkVersion, bootstrapPath);
|
||
|
|
fail();
|
||
|
|
} catch (err) {
|
||
|
|
err.message.should.equal(`If you are using 'useXctestrunFile' capability then you need to have a xctestrun file (expected: '${expected}')`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}));
|
||
|
|
|
||
|
|
describe('#getAdditionalRunContent', function () {
|
||
|
|
it('should return ios format', function () {
|
||
|
|
const wdaPort = getAdditionalRunContent(PLATFORM_NAME_IOS, 8000);
|
||
|
|
wdaPort.WebDriverAgentRunner
|
||
|
|
.EnvironmentVariables.USE_PORT
|
||
|
|
.should.equal('8000');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return tvos format', function () {
|
||
|
|
const wdaPort = getAdditionalRunContent(PLATFORM_NAME_TVOS, '9000');
|
||
|
|
wdaPort.WebDriverAgentRunner_tvOS
|
||
|
|
.EnvironmentVariables.USE_PORT
|
||
|
|
.should.equal('9000');
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('#getXctestrunFileName', function () {
|
||
|
|
const platformVersion = '12.0';
|
||
|
|
const udid = 'xxxxxyyyyyyzzzzzz';
|
||
|
|
|
||
|
|
it('should return ios format, real device', function () {
|
||
|
|
const platformName = 'iOs';
|
||
|
|
const deviceInfo = {isRealDevice: true, udid, platformVersion, platformName};
|
||
|
|
|
||
|
|
getXctestrunFileName(deviceInfo, '10.2.0').should.equal(
|
||
|
|
'WebDriverAgentRunner_iphoneos10.2.0-arm64.xctestrun');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return ios format, simulator', function () {
|
||
|
|
const platformName = 'ios';
|
||
|
|
const deviceInfo = {isRealDevice: false, udid, platformVersion, platformName};
|
||
|
|
|
||
|
|
getXctestrunFileName(deviceInfo, '10.2.0').should.equal(
|
||
|
|
`WebDriverAgentRunner_iphonesimulator10.2.0-${get_arch()}.xctestrun`);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return tvos format, real device', function () {
|
||
|
|
const platformName = 'tVos';
|
||
|
|
const deviceInfo = {isRealDevice: true, udid, platformVersion, platformName};
|
||
|
|
|
||
|
|
getXctestrunFileName(deviceInfo, '10.2.0').should.equal(
|
||
|
|
'WebDriverAgentRunner_tvOS_appletvos10.2.0-arm64.xctestrun');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('should return tvos format, simulator', function () {
|
||
|
|
const platformName = 'tvOS';
|
||
|
|
const deviceInfo = {isRealDevice: false, udid, platformVersion, platformName};
|
||
|
|
|
||
|
|
getXctestrunFileName(deviceInfo, '10.2.0').should.equal(
|
||
|
|
`WebDriverAgentRunner_tvOS_appletvsimulator10.2.0-${get_arch()}.xctestrun`);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|