diff --git a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt index daab496ba..38cd6d924 100644 --- a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt +++ b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt @@ -16,7 +16,6 @@ package io.appium.espressoserver.lib.handlers -import android.app.Instrumentation import android.util.Base64 import java.nio.charset.StandardCharsets diff --git a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt index cacf2c2cb..bd073a5cb 100644 --- a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt +++ b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt @@ -1,18 +1,23 @@ package io.appium.espressoserver.lib.model -import com.google.gson.annotations.SerializedName - -import java.util.Arrays +import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException enum class ClipboardDataType { - @SerializedName("PLAINTEXT") PLAINTEXT; - companion object { + fun getContentType(contentType: String?): ClipboardDataType { + if (contentType == null) return PLAINTEXT + + return when (contentType.toUpperCase()) { + PLAINTEXT.name -> + PLAINTEXT + else -> + throw InvalidArgumentException( + "Only case insensitive ${values().map { it.toString() }} content types are supported. " + + "'$contentType' is given instead") + } - fun supportedDataTypes(): String { - return Arrays.toString(values()) } } } diff --git a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt index 2d4f41cc4..56e3173be 100644 --- a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt +++ b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt @@ -16,6 +16,12 @@ package io.appium.espressoserver.lib.model +import com.google.gson.annotations.SerializedName + data class GetClipboardParams( - val contentType: ClipboardDataType = ClipboardDataType.PLAINTEXT -) : AppiumParams() + @SerializedName("contentType") + private val _contentType: String? +) : AppiumParams() { + val contentType : ClipboardDataType + get() = ClipboardDataType.getContentType(_contentType) +} diff --git a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt index 7232f1eb7..279f56f44 100644 --- a/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt +++ b/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt @@ -16,8 +16,14 @@ package io.appium.espressoserver.lib.model +import com.google.gson.annotations.SerializedName + data class SetClipboardParams( - val contentType: ClipboardDataType = ClipboardDataType.PLAINTEXT, + @SerializedName("contentType") + private val _contentType: String?, val content: String? = null, val label: String? = null -) : AppiumParams() +) : AppiumParams() { + val contentType : ClipboardDataType + get() = ClipboardDataType.getContentType(_contentType) +} diff --git a/test/functional/commands/clipboard-e2e-specs.js b/test/functional/commands/clipboard-e2e-specs.js new file mode 100644 index 000000000..d3d2725e0 --- /dev/null +++ b/test/functional/commands/clipboard-e2e-specs.js @@ -0,0 +1,29 @@ +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import { initSession, deleteSession, MOCHA_TIMEOUT } from '../helpers/session'; +import { APIDEMO_CAPS } from '../desired'; + + +chai.should(); +chai.use(chaiAsPromised); + + +describe('clipboard', function () { + this.timeout(MOCHA_TIMEOUT); + + let driver; + before(async function () { + driver = await initSession(APIDEMO_CAPS); + }); + after(async function () { + await deleteSession(); + }); + + it('should set and get clipboard', async function () { + await driver.setClipboard(new Buffer.from('Hello').toString('base64'), 'plaintext'); + // 'SGVsbG8=' is 'Hello' in base 64 encoding with a new line. + const text = await driver.getClipboard('PLAINTEXT'); + text.should.eql('SGVsbG8=\n'); + (new Buffer('SGVsbG8=\n', 'base64').toString()).should.eql('Hello'); + }); +});