diff --git a/3rdparty/clirarplugin/clirarplugin.cpp b/3rdparty/clirarplugin/clirarplugin.cpp index 61f4ccec7..67ae1d522 100644 --- a/3rdparty/clirarplugin/clirarplugin.cpp +++ b/3rdparty/clirarplugin/clirarplugin.cpp @@ -148,7 +148,9 @@ bool CliRarPlugin::isFileExistsFileName(const QString &line) bool CliRarPlugin::isMultiPasswordPrompt(const QString &line) { - return line.contains("use current password ? [Y]es, [N]o, [A]ll"); + // unrar 5/6 print "use current password ? [Y]es, [N]o, [A]ll"; unrar 7 dropped the space before '?' + return line.contains(QLatin1String("use current password ? [Y]es, [N]o, [A]ll")) + || line.contains(QLatin1String("use current password? [Y]es, [N]o, [A]ll")); } bool CliRarPlugin::isOpenFileFailed(const QString &line) diff --git a/tests/UnitTest/3rdparty/clirarplugin/ut_clirarplugin.cpp b/tests/UnitTest/3rdparty/clirarplugin/ut_clirarplugin.cpp index b1104c304..5b9aaf1d3 100644 --- a/tests/UnitTest/3rdparty/clirarplugin/ut_clirarplugin.cpp +++ b/tests/UnitTest/3rdparty/clirarplugin/ut_clirarplugin.cpp @@ -179,6 +179,9 @@ TEST_F(UT_CliRarPlugin, test_isFileExistsFileName) TEST_F(UT_CliRarPlugin, test_isMultiPasswordPrompt) { EXPECT_EQ(m_tester->isMultiPasswordPrompt("use current password ? [Y]es, [N]o, [A]ll"), true); + // unrar 7.x wording (no space before '?') + EXPECT_EQ(m_tester->isMultiPasswordPrompt("dir/b.dll - use current password? [Y]es, [N]o, [A]ll "), true); + EXPECT_EQ(m_tester->isMultiPasswordPrompt("Extracting dir/a.dll OK "), false); } TEST_F(UT_CliRarPlugin, test_isOpenFileFailed) @@ -315,6 +318,7 @@ TEST_F(UT_CliRarPlugin, test_handleLine_006) Stub stub; stub.set(ADDR(CliInterface, writeToProcess), cliInterface_writeToProcess_stub); EXPECT_EQ(m_tester->handleLine("use current password ? [Y]es, [N]o, [A]ll", WT_Extract), true); + EXPECT_EQ(m_tester->handleLine("dir/b.dll - use current password? [Y]es, [N]o, [A]ll ", WT_Extract), true); } TEST_F(UT_CliRarPlugin, test_handleLine_007)