Changeset View
Changeset View
Standalone View
Standalone View
src/tests/quick-tests/tst_KazvIOMenu.qml
- This file was added.
/* | |||||
* This file is part of kazv. | |||||
* SPDX-FileCopyrightText: 2024 nannanko <nannanko@kazv.moe> | |||||
* SPDX-License-Identifier: AGPL-3.0-or-later | |||||
*/ | |||||
import QtQuick | |||||
import QtTest | |||||
import '../../contents/ui' as Kazv | |||||
import 'test-helpers' as TestHelpers | |||||
import 'test-helpers.js' as Helpers | |||||
import moe.kazv.mxc.kazv 0.0 as MK | |||||
Item { | |||||
id: item | |||||
width: 800 | |||||
height: 600 | |||||
property var mockHelper: TestHelpers.MockHelper {} | |||||
property var kazvIOManager: QtObject { | |||||
property var deleteDownloadJob: mockHelper.noop() | |||||
property var deleteUploadJob: mockHelper.noop() | |||||
} | |||||
property var kazvIOJob: QtObject { | |||||
function isResulted() { return false; } | |||||
function isSuspended() { return false; } | |||||
function fileName() { return 'some-file-name'; } | |||||
property var suspend: mockHelper.noop() | |||||
property var cancel: mockHelper.noop() | |||||
property var progress: 0.0 | |||||
signal result(int ec) | |||||
} | |||||
property var suspendedJob: QtObject { | |||||
function isResulted() { return false; } | |||||
function isSuspended() { return true; } | |||||
property var resume: mockHelper.noop() | |||||
} | |||||
property var resultedJob: QtObject { | |||||
function isResulted() { return true; } | |||||
function isSuspended() { return false; } | |||||
function error() { return MK.KazvIOBaseJob.NoError; } | |||||
} | |||||
property var l10n: Helpers.fluentMock | |||||
Kazv.KazvIOMenu { | |||||
id: progressBar | |||||
kazvIOJob: null | |||||
jobId: 'some-job-id' | |||||
isUpload: false | |||||
} | |||||
TestCase { | |||||
id: kazvIOMenuTest | |||||
name: 'KazvIOMenuTest' | |||||
when: windowShown | |||||
function init() { | |||||
progressBar.kazvIOJob = null; | |||||
progressBar.isUpload = false; | |||||
} | |||||
function test_progress() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
const progress = findChild(progressBar, 'progressBar'); | |||||
compare(progress.value, kazvIOJob.progress); | |||||
kazvIOJob.progress = Math.random(); | |||||
compare(progress.value, kazvIOJob.progress); | |||||
} | |||||
function test_progressBarNullJob() { | |||||
progressBar.kazvIOJob = null; | |||||
verify(!progressBar.visible); | |||||
} | |||||
function test_progressBarDownload() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
progressBar.isUpload = false; | |||||
verify(progressBar.visible); | |||||
const prompt = findChild(progressBar, 'fileNamePrompt'); | |||||
const progressLayout = findChild(progressBar, 'progressLayout'); | |||||
const resultLayout = findChild(progressBar, 'resultLayout'); | |||||
verify(prompt.visible); | |||||
verify(progressLayout.visible); | |||||
verify(!resultLayout.visible); | |||||
compare(prompt.text, l10n.get('kazv-io-downloading-prompt', { | |||||
fileName: kazvIOJob.fileName()})); | |||||
} | |||||
function test_progressBarUpload() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
progressBar.isUpload = true; | |||||
const prompt = findChild(progressBar, 'fileNamePrompt'); | |||||
compare(prompt.text, l10n.get('kazv-io-uploading-prompt', { | |||||
fileName: kazvIOJob.fileName()})); | |||||
} | |||||
function test_resume() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
const pauseBtn = findChild(progressBar, 'pauseBtn'); | |||||
compare(pauseBtn.icon.name, 'media-playback-pause'); | |||||
mouseClick(pauseBtn); | |||||
compare(kazvIOJob.suspend.calledTimes(), 1); | |||||
} | |||||
function test_pause() { | |||||
progressBar.kazvIOJob = suspendedJob; | |||||
const pauseBtn = findChild(progressBar, 'pauseBtn'); | |||||
compare(pauseBtn.icon.name, 'media-playback-start'); | |||||
mouseClick(pauseBtn); | |||||
compare(suspendedJob.resume.calledTimes(), 1); | |||||
} | |||||
function test_cancel() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
const cancelBtn = findChild(progressBar, 'cancelBtn'); | |||||
mouseClick(cancelBtn); | |||||
compare(kazvIOJob.cancel.calledTimes(), 1); | |||||
} | |||||
function test_resulted() { | |||||
progressBar.kazvIOJob = resultedJob; | |||||
const progressLayout = findChild(progressBar, 'progressLayout'); | |||||
const resultLayout = findChild(progressBar, 'resultLayout'); | |||||
verify(!progressLayout.visible); | |||||
verify(resultLayout.visible); | |||||
} | |||||
/** | |||||
* ProgressBar is destroyed automatically after a successful upload, | |||||
* so there is no need to test | |||||
*/ | |||||
function test_resultSuccDownload() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
progressBar.isUpload = false; | |||||
const progressLayout = findChild(progressBar, 'progressLayout'); | |||||
const resultLayout = findChild(progressBar, 'resultLayout'); | |||||
const resultMsg = findChild(progressBar, 'resultMsg'); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.NoError); | |||||
verify(!progressLayout.visible); | |||||
verify(resultLayout.visible); | |||||
compare(resultMsg.text, l10n.get('kazv-io-download-success-prompt')); | |||||
} | |||||
function test_resultFailDownload() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
progressBar.isUpload = false; | |||||
const progressLayout = findChild(progressBar, 'progressLayout'); | |||||
const resultLayout = findChild(progressBar, 'resultLayout'); | |||||
const resultMsg = findChild(progressBar, 'resultMsg'); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.UserCancel); | |||||
verify(!progressLayout.visible); | |||||
verify(resultLayout.visible); | |||||
const failPromptL10nId = 'kazv-io-download-failure-prompt'; | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-user-cancel')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.OpenFileError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-open-file-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.WriteFileError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-write-file-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.KIOError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-network-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.HashError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-hash-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.ResponseError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-response-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.KazvError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-kazv-error')})); | |||||
} | |||||
function test_resultFailUpload() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
progressBar.isUpload = true; | |||||
const progressLayout = findChild(progressBar, 'progressLayout'); | |||||
const resultLayout = findChild(progressBar, 'resultLayout'); | |||||
const resultMsg = findChild(progressBar, 'resultMsg'); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.UserCancel); | |||||
verify(!progressLayout.visible); | |||||
verify(resultLayout.visible); | |||||
const failPromptL10nId = 'kazv-io-upload-failure-prompt'; | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-user-cancel')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.OpenFileError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-open-file-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.WriteFileError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-write-file-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.KIOError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-network-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.HashError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-hash-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.ResponseError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-response-error')})); | |||||
kazvIOJob.result(MK.KazvIOBaseJob.KazvError); | |||||
compare(resultMsg.text, l10n.get(failPromptL10nId, { | |||||
detail: l10n.get('kazv-io-failure-detail-kazv-error')})); | |||||
} | |||||
function test_closeDownload() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
progressBar.isUpload = false; | |||||
const progressLayout = findChild(progressBar, 'progressLayout'); | |||||
const resultLayout = findChild(progressBar, 'resultLayout'); | |||||
const closeBtn = findChild(progressBar, 'closeBtn') | |||||
kazvIOJob.result(MK.KazvIOBaseJob.NoError); | |||||
verify(!progressLayout.visible); | |||||
verify(resultLayout.visible); | |||||
mouseClick(closeBtn); | |||||
compare(kazvIOManager.deleteDownloadJob.calledTimes(), 1); | |||||
} | |||||
function test_closeUpload() { | |||||
progressBar.kazvIOJob = kazvIOJob; | |||||
progressBar.isUpload = true; | |||||
const progressLayout = findChild(progressBar, 'progressLayout'); | |||||
const resultLayout = findChild(progressBar, 'resultLayout'); | |||||
const closeBtn = findChild(progressBar, 'closeBtn') | |||||
kazvIOJob.result(MK.KazvIOBaseJob.NoError); | |||||
verify(!progressLayout.visible); | |||||
verify(resultLayout.visible); | |||||
mouseClick(closeBtn); | |||||
compare(kazvIOManager.deleteUploadJob.calledTimes(), 1); | |||||
} | |||||
} | |||||
} |