[education/rkward] rkward/autotests: Add tests for output interleaving and encoding
Thomas Friedrichsmeier
null at kde.org
Thu Sep 4 20:46:54 BST 2025
Git commit 1924e86cf8d9f41f2bf8cb5aeaa79904a753380a by Thomas Friedrichsmeier.
Committed on 03/09/2025 at 16:32.
Pushed by tfry into branch 'master'.
Add tests for output interleaving and encoding
M +35 -0 rkward/autotests/core_test.cpp
https://invent.kde.org/education/rkward/-/commit/1924e86cf8d9f41f2bf8cb5aeaa79904a753380a
diff --git a/rkward/autotests/core_test.cpp b/rkward/autotests/core_test.cpp
index 2611eccca..ee74d66a4 100644
--- a/rkward/autotests/core_test.cpp
+++ b/rkward/autotests/core_test.cpp
@@ -404,6 +404,41 @@ class RKWardCoreTest : public QObject {
QCOMPARE(output.value(4), u"444"_s);
}
+ void outputInterleavingTest() {
+ // test interleaving between output via R itself, ourput via system, and the corresponing source lines in the console
+ RInterface::issueCommand(QStringLiteral("sysout <- function(msg) { if (.Platform$OS.type == \"unix\") system(paste0(\"echo \", msg)) else invisible(system(paste0(\"cmd /c echo \", msg))) }"), RCommand::User);
+ RKConsole::mainConsole()->pipeUserCommand(QStringLiteral("cat(\"first\\n\")\ninvisible(\"second\")\nsysout(\"third\")\ncat(\"fourth\\n\")\n"));
+ RInterface::issueCommand(QStringLiteral("rm(sysout)"), RCommand::User);
+ waitForAllFinished();
+ QStringList consoleout = RKConsole::mainConsole()->getFullContent().mid(consoleout.length() - 7);
+ QVERIFY(consoleout.value(0).contains(u"cat"_s));
+ QVERIFY(consoleout.value(0).contains(u"first"_s));
+ QVERIFY(!consoleout.value(1).contains(u"cat"_s));
+ QVERIFY(consoleout.value(1).contains(u"first"_s));
+ QVERIFY(consoleout.value(2).contains(u"second"_s));
+ QVERIFY(consoleout.value(3).contains(u"sysout"_s));
+ QVERIFY(consoleout.value(3).contains(u"third"_s));
+ QVERIFY(!consoleout.value(4).contains(u"sysout"_s));
+ QVERIFY(consoleout.value(4).contains(u"third"_s));
+ QVERIFY(consoleout.value(5).contains(u"cat"_s));
+ QVERIFY(consoleout.value(5).contains(u"fourth"_s));
+ QVERIFY(!consoleout.value(6).contains(u"cat"_s));
+ QVERIFY(consoleout.value(6).contains(u"fourth"_s));
+ }
+
+ void printUtf8Test() {
+ // some stuff we don't expect to work in native locale
+ const auto strings = QStringList() << u"¢Ä"_s << u"€🚚"_s << u"✨☀️"_s;
+ for (const auto &string : strings) {
+ runCommandAsync(new RCommand(u"print(\"%1\"); cat(paste0(\"[\", \"%1\", \"]\"))"_s.arg(string), RCommand::App), nullptr, [string](RCommand *command) {
+ QVERIFY(!command->failed());
+ QVERIFY(command->fullOutput().contains(u"\"%1\""_s.arg(string)));
+ QVERIFY(command->fullOutput().contains(u"[%1]"_s.arg(string)));
+ });
+ }
+ waitForAllFinished();
+ }
+
void cancelCommandStressTest() {
int cancelled_commands = 0;
int commands_out = 0;
More information about the rkward-tracker
mailing list