libreoffice-online/test/UnitEachView.cpp
Ashod Nakashian 5c6cd3aaec wsd: test: properly include config.h in the tests
When config.h is not included, the build
configuration is missing from the translation
unit in question. This affects ENABLE_SSL,
for one.

Also, HttpRequest.hpp depends on LOOLWSD_VERSION,
which is defined in config.h.

The config.h header must be included in all
trasnlation-units, and must be the first include.
This is to avoid conflicts and/or mismatching
binaries built with different compile-time values.

We also statically assert if LOOLWSD_VERSION
is not defined, to help the error message.

Change-Id: Ic4b45de879f3360a07e9507fdf04abfa4cec6a71
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2021-04-02 12:43:39 -04:00

199 lines
6.6 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <config.h>
#include <memory>
#include <string>
#include <Poco/URI.h>
#include <test/lokassert.hpp>
#include <Unit.hpp>
#include <Util.hpp>
#include <helpers.hpp>
// Include config.h last, so the test server URI is still HTTP, even in SSL builds.
#include <config.h>
class LOOLWebSocket;
namespace
{
void testEachView(const std::string& doc, const std::string& type, const std::string& protocol,
const std::string& protocolView, const std::string& testname)
{
const std::string view = testname + "view %d -> ";
const std::string error = testname + "view %d, did not receive a %s message as expected";
try
{
// Load a document
std::string documentPath, documentURL;
helpers::getDocumentPathAndURL(doc, documentPath, documentURL, testname);
int itView = 0;
std::shared_ptr<LOOLWebSocket> socket = helpers::loadDocAndGetSocket(
Poco::URI(helpers::getTestServerURI()), documentURL, Poco::format(view, itView));
// Check document size
helpers::sendTextFrame(socket, "status", Poco::format(view, itView));
auto response
= helpers::assertResponseString(socket, "status:", Poco::format(view, itView));
int docPart = -1;
int docParts = 0;
int docHeight = 0;
int docWidth = 0;
int docViewId = -1;
helpers::parseDocSize(response.substr(7), type, docPart, docParts, docWidth, docHeight,
docViewId);
// Send click message
std::string text;
Poco::format(text, "mouse type=%s x=%d y=%d count=1 buttons=1 modifier=0",
std::string("buttondown"), docWidth / 2, docHeight / 6);
helpers::sendTextFrame(socket, text, Poco::format(view, itView));
text.clear();
Poco::format(text, "mouse type=%s x=%d y=%d count=1 buttons=1 modifier=0",
std::string("buttonup"), docWidth / 2, docHeight / 6);
helpers::sendTextFrame(socket, text, Poco::format(view, itView));
// Double of the default.
const std::size_t timeoutMs = 20000;
response = helpers::getResponseString(socket, protocol, Poco::format(view, itView), timeoutMs);
LOK_ASSERT_MESSAGE(Poco::format(error, itView, protocol), !response.empty());
// Connect and load 0..N Views, where N<=limit
std::vector<std::shared_ptr<LOOLWebSocket>> views;
static_assert(MAX_DOCUMENTS >= 2, "MAX_DOCUMENTS must be at least 2");
const int limit = std::min(4, MAX_DOCUMENTS - 1); // +1 connection above
for (itView = 0; itView < limit; ++itView)
{
views.emplace_back(helpers::loadDocAndGetSocket(
Poco::URI(helpers::getTestServerURI()), documentURL, Poco::format(view, itView)));
}
// main view should receive response each view
if (protocolView == "invalidateviewcursor:" || protocolView == "viewcursorvisible:"
|| protocolView == "cellviewcursor:" || protocolView == "graphicviewselection:")
{
return;
}
itView = 0;
for (const auto& socketView : views)
{
response = helpers::getResponseString(socket, protocolView, Poco::format(view, itView), timeoutMs);
LOK_ASSERT_MESSAGE(Poco::format(error, itView, protocolView), !response.empty());
++itView;
(void)socketView;
}
}
catch (const Poco::Exception& exc)
{
LOK_ASSERT_FAIL(exc.displayText());
}
catch (const std::exception& exc)
{
LOK_ASSERT_FAIL(exc.what());
}
}
}
/// Test suite that asserts a state for each view.
class UnitEachView : public UnitWSD
{
TestResult testInvalidateViewCursor();
TestResult testViewCursorVisible();
TestResult testCellViewCursor();
TestResult testGraphicViewSelectionWriter();
TestResult testGraphicViewSelectionCalc();
TestResult testGraphicViewSelectionImpress();
public:
UnitEachView();
void invokeWSDTest() override;
};
UnitBase::TestResult UnitEachView::testInvalidateViewCursor()
{
testEachView("viewcursor.odp", "presentation",
"invalidatecursor:", "invalidateviewcursor:", "invalidateViewCursor ");
return TestResult::Ok;
}
UnitBase::TestResult UnitEachView::testViewCursorVisible()
{
testEachView("viewcursor.odp", "presentation",
"cursorvisible:", "viewcursorvisible:", "viewCursorVisible ");
return TestResult::Ok;
}
UnitBase::TestResult UnitEachView::testCellViewCursor()
{
testEachView("empty.ods", "spreadsheet", "cellcursor:", "cellviewcursor:", "cellViewCursor");
return TestResult::Ok;
}
UnitBase::TestResult UnitEachView::testGraphicViewSelectionWriter()
{
testEachView("graphicviewselection.odt", "text",
"graphicselection:", "graphicviewselection:", "graphicViewSelection-odt ");
return TestResult::Ok;
}
UnitBase::TestResult UnitEachView::testGraphicViewSelectionCalc()
{
testEachView("graphicviewselection.ods", "spreadsheet",
"graphicselection:", "graphicviewselection:", "graphicViewSelection-ods ");
return TestResult::Ok;
}
UnitBase::TestResult UnitEachView::testGraphicViewSelectionImpress()
{
testEachView("graphicviewselection.odp", "presentation",
"graphicselection:", "graphicviewselection:", "graphicViewSelection-odp ");
return TestResult::Ok;
}
UnitEachView::UnitEachView()
{
// 8 times larger then the default.
setTimeout(std::chrono::seconds(240));
}
void UnitEachView::invokeWSDTest()
{
UnitBase::TestResult result = testInvalidateViewCursor();
if (result != TestResult::Ok)
exitTest(result);
result = testViewCursorVisible();
if (result != TestResult::Ok)
exitTest(result);
result = testCellViewCursor();
if (result != TestResult::Ok)
exitTest(result);
result = testGraphicViewSelectionWriter();
if (result != TestResult::Ok)
exitTest(result);
result = testGraphicViewSelectionCalc();
if (result != TestResult::Ok)
exitTest(result);
result = testGraphicViewSelectionImpress();
if (result != TestResult::Ok)
exitTest(result);
exitTest(TestResult::Ok);
}
UnitBase* unit_create_wsd(void) { return new UnitEachView(); }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */