From 43b5e710ef8d08cf8ad210a5d2fa3a75e3e52547 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Sun, 19 Mar 2023 12:28:35 +0000 Subject: [PATCH] [mock] Fix mockUploadAudio always throws ISE, part of #2548 --- mirai-core-mock/src/internal/contact/util.kt | 21 +++++++++++--------- mirai-core-mock/test/AbsoluteFileTest.kt | 17 ++++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/mirai-core-mock/src/internal/contact/util.kt b/mirai-core-mock/src/internal/contact/util.kt index 6a57cd83f..5aaae8c8a 100644 --- a/mirai-core-mock/src/internal/contact/util.kt +++ b/mirai-core-mock/src/internal/contact/util.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 Mamoe Technologies and contributors. + * Copyright 2019-2023 Mamoe Technologies and contributors. * * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. @@ -50,14 +50,17 @@ internal fun MessageSource.withMessage(msg: Message): MessageChain = buildMessag } @Suppress("UNUSED_PARAMETER") -internal suspend fun ExternalResource.mockUploadAudio(bot: MockBot) = inResource { - OfflineAudio( - filename = md5.toUHexString() + ".amr", - fileMd5 = md5, - fileSize = size, - codec = AudioCodec.SILK, - extraData = null, - ) +internal suspend fun ExternalResource.mockUploadAudio(bot: MockBot): OfflineAudio { + val md5 = md5 // calculate before using resource + return inResource { + OfflineAudio( + filename = md5.toUHexString() + ".amr", + fileMd5 = md5, + fileSize = size, + codec = AudioCodec.SILK, + extraData = null, + ) + } } internal suspend fun ExternalResource.mockUploadVoice(bot: MockBot) = kotlin.run { diff --git a/mirai-core-mock/test/AbsoluteFileTest.kt b/mirai-core-mock/test/AbsoluteFileTest.kt index 6990adaaa..2ebf345d8 100644 --- a/mirai-core-mock/test/AbsoluteFileTest.kt +++ b/mirai-core-mock/test/AbsoluteFileTest.kt @@ -18,6 +18,7 @@ import kotlinx.coroutines.flow.toList import net.mamoe.mirai.contact.MemberPermission import net.mamoe.mirai.event.events.GroupMessageEvent import net.mamoe.mirai.message.data.FileMessage +import net.mamoe.mirai.mock.internal.contact.mockUploadAudio import net.mamoe.mirai.mock.internal.remotefile.absolutefile.MockRemoteFiles import net.mamoe.mirai.mock.internal.serverfs.MockServerFileSystemImpl import net.mamoe.mirai.mock.utils.simpleMemberInfo @@ -145,4 +146,20 @@ internal class AbsoluteFileTest : MockBotTestBase() { } assertEquals(0, group.files.root.resolveFiles("/a").count()) } + + @Test + @Suppress("INVISIBLE_REFERENCE") + fun testMockUploadAudio() = runTest { + val file = runBIO { + kotlin.io.path.createTempFile("test", ".txt").toFile().apply { + writeText("test") + deleteOnExit() + } + } + + file.toExternalResource().use { + assertIsInstance<net.mamoe.mirai.internal.utils.ExternalResourceImplByFile>(it) + it.mockUploadAudio(bot) + } + } } \ No newline at end of file