From 9f2ed3b9da7dd0d47fe151962da0058d1038fe4c Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 15 Jun 2015 13:01:28 +0200 Subject: [PATCH] CmbIpc: Add unit tests for partial commands Change-Id: Id5b073d6d3ba89eb4949137336e7648b709909a8 Reviewed-by: Nikolai Kosjar --- .../unittest/readandwritecommandblocktest.cpp | 57 ++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/tests/unit/codemodelbackend/unittest/readandwritecommandblocktest.cpp b/tests/unit/codemodelbackend/unittest/readandwritecommandblocktest.cpp index c71829449da..e0b4960b676 100644 --- a/tests/unit/codemodelbackend/unittest/readandwritecommandblocktest.cpp +++ b/tests/unit/codemodelbackend/unittest/readandwritecommandblocktest.cpp @@ -63,9 +63,16 @@ protected: template void CompareCommand(const Type &command); + QVariant writeCodeCompletedCommand(); + void popLastCharacterFromBuffer(); + void pushLastCharacterToBuffer(); + void readPartialCommand(); + +protected: QBuffer buffer; CodeModelBackEnd::WriteCommandBlock writeCommandBlock; CodeModelBackEnd::ReadCommandBlock readCommandBlock; + char lastCharacter = 0; }; ReadAndWriteCommandBlockTest::ReadAndWriteCommandBlockTest() @@ -155,6 +162,54 @@ TEST_F(ReadAndWriteCommandBlockTest, CompareCodeCompletedCommand) CompareCommand(CodeModelBackEnd::CodeCompletedCommand(codeCompletions, 1)); } +TEST_F(ReadAndWriteCommandBlockTest, GetInvalidCommandForAPartialBuffer) +{ + writeCodeCompletedCommand(); + popLastCharacterFromBuffer(); + buffer.seek(0); + + readPartialCommand(); +} + +TEST_F(ReadAndWriteCommandBlockTest, ReadCommandAfterInterruption) +{ + const QVariant writeCommand = writeCodeCompletedCommand(); + popLastCharacterFromBuffer(); + buffer.seek(0); + readPartialCommand(); + pushLastCharacterToBuffer(); + + ASSERT_EQ(readCommandBlock.read(), writeCommand); +} + +QVariant ReadAndWriteCommandBlockTest::writeCodeCompletedCommand() +{ + CodeModelBackEnd::CodeCompletedCommand command(QVector({Utf8StringLiteral("newFunction()")}), 1); + const QVariant writeCommand = QVariant::fromValue(command); + writeCommandBlock.write(writeCommand); + + return writeCommand; +} + +void ReadAndWriteCommandBlockTest::popLastCharacterFromBuffer() +{ + auto &internalBuffer = buffer.buffer(); + lastCharacter = internalBuffer.at(internalBuffer.size() - 1); + internalBuffer.chop(1); +} + +void ReadAndWriteCommandBlockTest::pushLastCharacterToBuffer() +{ + buffer.buffer().push_back(lastCharacter); +} + +void ReadAndWriteCommandBlockTest::readPartialCommand() +{ + QVariant readCommand = readCommandBlock.read(); + + ASSERT_FALSE(readCommand.isValid()); +} + template void ReadAndWriteCommandBlockTest::CompareCommand(const Type &command) { @@ -168,5 +223,3 @@ void ReadAndWriteCommandBlockTest::CompareCommand(const Type &command) } } - -