tempVec;
for (auto tickerItem : ticker)
tempVec.emplace_back(dataCallbacks.at(whatData)(tickerItem));
QString str("");
for (auto it = tempVec.begin(); it != tempVec.end(); ++it) {
str += *it;
str += (it < tempVec.end()-1) ? "
" : "
";
}
return str;
}
QString Ticker::symbolsToString() { return dataToString(SYMBOLS); }
QString Ticker::priceToString() { return dataToString(PRICES); }
QString Ticker::changeToString() { return dataToString(CHANGES); }
QString Ticker::toString() {
QString str("");
for (auto it = ticker.begin(); it != ticker.end(); ++it) {
str += it->toString();
str += (it < ticker.end()-1) ? "
" : "
";
}
return str;
}
MiniStocks-file-not-found-fix/StockTicker/ticker/Ticker.h 0000664 0000000 0000000 00000002103 13611152477 0023654 0 ustar 00root root 0000000 0000000 /*
* MiniStocks created by Daniel Kostuj
*
* This file contains all declarations for the Ticker class.
* The Ticker class is the class that saves/loads all Ticker item data and displays them.
*
* Use of this source code is governed by the license that can be
* found in the LICENSE file.
*/
#ifndef TICKER_H
#define TICKER_H
#include "../file/File.h"
#include "TickerItem.h"
#include
#include
enum WhatData {SYMBOLS, PRICES, CHANGES};
class Ticker {
static std::vector ticker;
static std::vector loadedTickerSymbols;
QString dataToString(const WhatData &whatData);
Ticker();
static void refresh();
static void loadTickersFromVector(const std::vector &tickerVec);
static File savedTickers;
public:
~Ticker();
std::vector getAllTickerSymbols();
QString symbolsToString();
QString priceToString();
QString changeToString();
QString toString();
static Ticker& getInstance();
static std::vector loadTickerSymbolsFromSettingsFile();
};
#endif
MiniStocks-file-not-found-fix/StockTicker/ticker/TickerInfoDownloader.cpp 0000664 0000000 0000000 00000005531 13611152477 0027052 0 ustar 00root root 0000000 0000000 /*
* MiniStocks created by Daniel Kostuj
*
* This file contains all definitions for the TickerInfoDownloader class.
* The TickerInfoDownloader class downloads the newest stock price info for a single ticker.
*
* Use of this source code is governed by the license that can be
* found in the LICENSE file.
*/
#include "../file/File.h"
#include "TickerInfoDownloader.h"
#include
#ifdef HAS_CURL
#include "curl/curl.h"
#else
#include
#include
#include
#include
#include
#include
#include
#endif
TickerInfoDownloader::TickerInfoDownloader(const QString &ticker) : tickerSymbol(ticker)
{
}
void TickerInfoDownloader::downloadData(const QString &url, const QString &filepath) {
File::makeSaveDir();
#ifdef HAS_CURL
if ((curl = curl_easy_init())) {
fp = fopen(filepath.toLatin1().data(), "wb");
curl_easy_setopt(curl, CURLOPT_URL, url.toLatin1().data());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write_callback());
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
return;
}
throw;
}
#else
QNetworkAccessManager manager;
QNetworkReply *reply;
QEventLoop loop;
QString path;
QNetworkRequest request(url);
reply = manager.get(request);
QObject::connect (reply, SIGNAL(finished()),&loop, SLOT(quit()));
loop.exec();
path = QUrl(url).path();
QFile file(filepath);
file.open(QIODevice::WriteOnly);
file.write(reply->readAll());
file.close();
reply->deleteLater();
}
#endif
// parses raw CSV data and saves it into the TckerItem vector
std::vector TickerInfoDownloader::parseCSVintoVector(std::istream& csv) {
std::string line;
std::vector parsedCSV;
// IEXTradingData consists of two lines:
while (std::getline(csv,line,','))
parsedCSV.emplace_back(QString::fromStdString(line));
return parsedCSV;
}
void TickerInfoDownloader::downloadAndParseCSVFile() {
auto fileName = "/quotes_" + tickerSymbol + ".csv";
auto csvFileLocation = File::getFileInSaveDir(fileName);
// download & save JSON file from Stooq
auto quotes = "https://stooq.com/q/l/?s=" + tickerSymbol + "&f=soc&e=csv";
try {
downloadData(quotes, csvFileLocation);
} catch (...) {
qDebug() << "new CSV file for " << tickerSymbol << " cannot be downloaded.";
return;
}
// parse CSV file & delete it afterwards
std::ifstream csvFile(csvFileLocation.toStdString());
this->stockData = parseCSVintoVector(csvFile);
QFile::remove(csvFileLocation);
}
std::vector TickerInfoDownloader::getData() {
downloadAndParseCSVFile();
return this->stockData;
}
MiniStocks-file-not-found-fix/StockTicker/ticker/TickerInfoDownloader.h 0000664 0000000 0000000 00000001656 13611152477 0026523 0 ustar 00root root 0000000 0000000 /*
* MiniStocks created by Daniel Kostuj
*
* This file contains all declarations for the TickerInfoDownloader class.
* The TickerInfoDownloader class downloads the newest stock price info for a single ticker.
*
* Use of this source code is governed by the license that can be
* found in the LICENSE file.
*/
#ifndef TICKERINFODOWNLOADER_H
#define TICKERINFODOWNLOADER_H
#ifdef HAS_CURL
#include "curl/curl.h"
#endif
#include
#include
#include
class TickerInfoDownloader
{
#ifdef HAS_CURL
CURL *curl;
FILE *fp;
#endif
const QString tickerSymbol;
void downloadData(const QString &url, const QString &filepath);
std::vector parseCSVintoVector(std::istream& csv);
void downloadAndParseCSVFile();
std::vector stockData;
public:
TickerInfoDownloader(const QString &ticker);
std::vector getData();
};
#endif // TICKERINFODOWNLOADER_H
MiniStocks-file-not-found-fix/StockTicker/ticker/TickerItem.cpp 0000664 0000000 0000000 00000004534 13611152477 0025040 0 ustar 00root root 0000000 0000000 /*
* MiniStocks created by Daniel Kostuj
*
* This file contains all definitions for the TickerItem class.
* The TickerItem class parses the downloaded stock data into a displayable string.
*
* Use of this source code is governed by the license that can be
* found in the LICENSE file.
*/
#include "../file/File.h"
#include "TickerItem.h"
#include
#include
// A TickerItem is instantiated by downloading newest data and assigning it to components
TickerItem::TickerItem(QString symbol) : tickerSymbol(symbol.toUpper()), infoDownloader(tickerSymbol) {
}
// load new data
std::vector TickerItem::downloadItemData() {
return infoDownloader.getData();
}
// assigns parsed data from CSV file to TickerItem components
void TickerItem::assignNewItemData(std::vector &parsedCSV) {
try {
value = parsedCSV.at(2).toDouble();
change = (value - parsedCSV.at(1).toDouble()) / value;
} catch (const std::exception& e) { // Spelling error? Connection problems? Stock not existing anymore?
qDebug() << tickerSymbol << ":\t TickerItem can not be loaded";
qDebug() << e.what();
return;
}
return;
}
QString TickerItem::buildColorblock (const QString &color){
return "";
}
QString TickerItem::colorizeText (const QString &message, const QString &color) {
return buildColorblock(color) + message + "";
}
// Obvious getter methods
QString TickerItem::gettickerSymbol() { return tickerSymbol.mid(0,9); }
QString TickerItem::getPrice() { return QString::number(value,'d',2);}
QString TickerItem::getChange() { return QString::number(change,'d',2); }
QString TickerItem::getChangeColor() { return (change < 0 ) ? "red" : "green"; }
QString TickerItem::getChangeSign() { return (change >= 0) ? "+" : ""; }
QString TickerItem::getChangeHTMLOutput() {
return ("(" + colorizeText(getChangeSign() + getChange() + "%", getChangeColor()) + ")");
}
// Old toString method, for debug purposes
QString TickerItem::toString() {
// Percentage shall be either in green or red color, depending on sign
const QString tab("\t");
return tickerSymbol.mid(0,9) + tab
+ QString::number(value,'d',2)
+ tab + "("
+ colorizeText(getChangeSign() + QString::number(change,'d',2)+"%", getChangeColor())
+ ")";
}
MiniStocks-file-not-found-fix/StockTicker/ticker/TickerItem.h 0000664 0000000 0000000 00000002115 13611152477 0024476 0 ustar 00root root 0000000 0000000 /*
* MiniStocks created by Daniel Kostuj
*
* This file contains all declarations for the TickerItem class.
* The TickerItem class parses the downloaded stock data into a displayable string.
*
* Use of this source code is governed by the license that can be
* found in the LICENSE file.
*/
#ifndef TICKERITEM_H
#define TICKERITEM_H
#include "TickerInfoDownloader.h"
#include
#include
class TickerItem {
QString tickerSymbol;
double value;
QString currency;
double change;
std::vector itemData;
TickerInfoDownloader infoDownloader;
QString buildColorblock (const QString &color);
QString colorizeText (const QString &message, const QString &color);
public:
explicit TickerItem(QString symbol);
QString toString();
QString gettickerSymbol();
QString getPrice();
QString getChange();
QString getChangeColor();
QString getChangeSign();
QString getChangeHTMLOutput();
std::vector downloadItemData();
void assignNewItemData(std::vector &parsedCSV);
protected:
};
#endif
MiniStocks-file-not-found-fix/StockTicker/ticker/TickerRefreshThread.cpp 0000664 0000000 0000000 00000001211 13611152477 0026655 0 ustar 00root root 0000000 0000000 /*
* MiniStocks created by Daniel Kostuj
*
* This file contains all definitions for the Ticker refresh thread.
*
* Use of this source code is governed by the license that can be
* found in the LICENSE file.
*/
#include "TickerRefreshThread.h"
#include
#include
#include
[[ noreturn ]] void refreshTicker(Ui::MainWindow *ui) {
while (1) {
Ticker instance = Ticker::getInstance();
ui->symbolColumn->setText(instance.symbolsToString());
ui->priceColumn->setText(instance.priceToString());
ui->changColumn->setText(instance.changeToString());
sleep(1);
}
}
MiniStocks-file-not-found-fix/StockTicker/ticker/TickerRefreshThread.h 0000664 0000000 0000000 00000000660 13611152477 0026331 0 ustar 00root root 0000000 0000000 /*
* MiniStocks created by Daniel Kostuj
*
* This file contains all declarations for the Ticker refresh thread.
*
* Use of this source code is governed by the license that can be
* found in the LICENSE file.
*/
#ifndef TICKERREFRESHTHREAD_H
#define TICKERREFRESHTHREAD_H
#include "ui_mainwindow.h"
#include "../dialogs/MainWindow.h"
[[ noreturn ]] void refreshTicker(Ui::MainWindow *ui);
#endif // TICKERREFRESHTHREAD_H
MiniStocks-file-not-found-fix/StockTicker/unittests/ 0000775 0000000 0000000 00000000000 13611152477 0023047 5 ustar 00root root 0000000 0000000 MiniStocks-file-not-found-fix/StockTicker/unittests/MS-unittests.pro 0000664 0000000 0000000 00000001203 13611152477 0026144 0 ustar 00root root 0000000 0000000 # Created by and for Qt Creator This file was created for editing the project sources only.
# You may attempt to use it for building too, by modifying this file here.
#TARGET = MS-unittests
QT += core gui
QT += network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TEMPLATE = app
TARGET = unittests
INCLUDEPATH += .
HEADERS = \
$$PWD/../file/File.h \
$$PWD/../ticker/TickerInfoDownloader.h \
$$PWD/../ticker/TickerItem.h \
catch.hpp
SOURCES = \
$$PWD/../file/File.cpp \
$$PWD/unittestmain.cpp \
$$PWD/../ticker/TickerInfoDownloader.cpp \
$$PWD/../ticker/TickerItem.cpp
INCLUDEPATH = \
$$PWD/.
#DEFINES =
MiniStocks-file-not-found-fix/StockTicker/unittests/UnitTests.pro.user 0000664 0000000 0000000 00000057742 13611152477 0026527 0 ustar 00root root 0000000 0000000
EnvironmentId
{7eb73239-b340-4532-85ca-84dc0a3dc3f2}
ProjectExplorer.Project.ActiveTarget
0
ProjectExplorer.Project.EditorSettings
true
false
true
Cpp
CppGlobal
QmlJS
QmlJSGlobal
2
UTF-8
false
4
false
80
true
true
1
true
false
0
true
true
0
8
true
1
true
true
true
false
ProjectExplorer.Project.PluginSettings
true
ProjectExplorer.Project.Target.0
Desktop
Desktop
{337e3306-cbe3-4431-864b-2762e3eccb2b}
0
0
0
/home/dk/Documents/Code/C++/QT/MiniStocks/StockTicker/build-UnitTests-Desktop-Debug
true
qmake
QtProjectManager.QMakeBuildStep
true
false
false
false
true
Make
Qt4ProjectManager.MakeStep
false
false
2
Build
ProjectExplorer.BuildSteps.Build
true
Make
Qt4ProjectManager.MakeStep
true
clean
false
1
Clean
ProjectExplorer.BuildSteps.Clean
2
false
Debug
Debug
Qt4ProjectManager.Qt4BuildConfiguration
2
true
/home/dk/Documents/Code/C++/QT/MiniStocks/StockTicker/build-UnitTests-Desktop-Release
true
qmake
QtProjectManager.QMakeBuildStep
false
false
false
true
true
Make
Qt4ProjectManager.MakeStep
false
false
2
Build
ProjectExplorer.BuildSteps.Build
true
Make
Qt4ProjectManager.MakeStep
true
clean
false
1
Clean
ProjectExplorer.BuildSteps.Clean
2
false
Release
Release
Qt4ProjectManager.Qt4BuildConfiguration
0
true
/home/dk/Documents/Code/C++/QT/MiniStocks/StockTicker/build-UnitTests-Desktop-Profile
true
qmake
QtProjectManager.QMakeBuildStep
true
false
true
true
true
Make
Qt4ProjectManager.MakeStep
false
false
2
Build
ProjectExplorer.BuildSteps.Build
true
Make
Qt4ProjectManager.MakeStep
true
clean
false
1
Clean
ProjectExplorer.BuildSteps.Clean
2
false
Profile
Profile
Qt4ProjectManager.Qt4BuildConfiguration
0
true
3
0
Deploy
ProjectExplorer.BuildSteps.Deploy
1
Deploy Configuration
ProjectExplorer.DefaultDeployConfiguration
1
dwarf
cpu-cycles
250
-F
true
4096
false
false
1000
true
false
false
false
false
true
0.01
10
true
kcachegrind
1
25
1
true
false
true
valgrind
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
UnitTests
Qt4ProjectManager.Qt4RunConfiguration:/home/dk/Documents/Code/C++/QT/MiniStocks/StockTicker/unittests/UnitTests.pro
3768
false
true
true
false
false
true
/home/dk/Documents/Code/C++/QT/MiniStocks/StockTicker/build-UnitTests-Desktop-Debug
1
ProjectExplorer.Project.TargetCount
1
ProjectExplorer.Project.Updater.FileVersion
21
Version
21
MiniStocks-file-not-found-fix/StockTicker/unittests/build/ 0000775 0000000 0000000 00000000000 13611152477 0024146 5 ustar 00root root 0000000 0000000 MiniStocks-file-not-found-fix/StockTicker/unittests/build/Makefile 0000664 0000000 0000000 00000147753 13611152477 0025627 0 ustar 00root root 0000000 0000000 #############################################################################
# Makefile for building: unittests
# Generated by qmake (3.1) (Qt 5.13.0)
# Project: ../MS-unittests.pro
# Template: app
# Command: /usr/bin/qmake -o Makefile ../MS-unittests.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug
#############################################################################
MAKEFILE = Makefile
EQ = =
####### Compiler, tools and options
CC = gcc
CXX = g++
DEFINES = -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
CFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
INCPATH = -I../../unittests -I. -I../../unittests -isystem /usr/include/qt -isystem /usr/include/qt/QtWidgets -isystem /usr/include/qt/QtGui -isystem /usr/include/qt/QtNetwork -isystem /usr/include/qt/QtCore -I. -isystem /usr/include/libdrm -I/usr/lib/qt/mkspecs/linux-g++
QMAKE = /usr/bin/qmake
DEL_FILE = rm -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p
COPY = cp -f
COPY_FILE = cp -f
COPY_DIR = cp -f -R
INSTALL_FILE = install -m 644 -p
INSTALL_PROGRAM = install -m 755 -p
INSTALL_DIR = cp -f -R
QINSTALL = /usr/bin/qmake -install qinstall
QINSTALL_PROGRAM = /usr/bin/qmake -install qinstall -exe
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
TAR = tar -cf
COMPRESS = gzip -9f
DISTNAME = unittests1.0.0
DISTDIR = /home/dk/Documents/Code/C++/QT/MiniStocks/StockTicker/unittests/build/.tmp/unittests1.0.0
LINK = g++
LFLAGS =
LIBS = $(SUBLIBS) /usr/lib/libQt5Widgets.so /usr/lib/libQt5Gui.so /usr/lib/libQt5Network.so /usr/lib/libQt5Core.so /usr/lib/libGL.so -lpthread
AR = ar cqs
RANLIB =
SED = sed
STRIP = strip
####### Output directory
OBJECTS_DIR = ./
####### Files
SOURCES = ../../file/File.cpp \
../unittestmain.cpp \
../../ticker/TickerInfoDownloader.cpp \
../../ticker/TickerItem.cpp
OBJECTS = File.o \
unittestmain.o \
TickerInfoDownloader.o \
TickerItem.o
DIST = /usr/lib/qt/mkspecs/features/spec_pre.prf \
/usr/lib/qt/mkspecs/common/unix.conf \
/usr/lib/qt/mkspecs/common/linux.conf \
/usr/lib/qt/mkspecs/common/sanitize.conf \
/usr/lib/qt/mkspecs/common/gcc-base.conf \
/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
/usr/lib/qt/mkspecs/common/g++-base.conf \
/usr/lib/qt/mkspecs/common/g++-unix.conf \
/usr/lib/qt/mkspecs/qconfig.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri \
/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
/usr/lib/qt/mkspecs/modules/qt_Baloo.pri \
/usr/lib/qt/mkspecs/modules/qt_BluezQt.pri \
/usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayClient.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayCommon.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayCore.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayKItemModels.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayLauncher.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayLauncherUi.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayProbe.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayUi.pri \
/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
/usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri \
/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
/usr/lib/qt/mkspecs/modules/qt_KCalCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KCddb.pri \
/usr/lib/qt/mkspecs/modules/qt_KChart.pri \
/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KContacts.pri \
/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \
/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
/usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri \
/usr/lib/qt/mkspecs/modules/qt_KGantt.pri \
/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KHolidays.pri \
/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri \
/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri \
/usr/lib/qt/mkspecs/modules/qt_KMime.pri \
/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
/usr/lib/qt/mkspecs/modules/qt_KPeople.pri \
/usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
/usr/lib/qt/mkspecs/modules/qt_KrossCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KrossUi.pri \
/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
/usr/lib/qt/mkspecs/modules/qt_KService.pri \
/usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri \
/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
/usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri \
/usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri \
/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3danimation_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gamepad.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gamepad_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_remoteobjects.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_remoteobjects_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_repparser.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_repparser_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scxml.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scxml_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialbus.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialbus_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webview.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webview_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
/usr/lib/qt/mkspecs/modules/qt_Marble.pri \
/usr/lib/qt/mkspecs/modules/qt_ModemManagerQt.pri \
/usr/lib/qt/mkspecs/modules/qt_NetworkManagerQt.pri \
/usr/lib/qt/mkspecs/modules/qt_OktetaCore.pri \
/usr/lib/qt/mkspecs/modules/qt_OktetaGui.pri \
/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
/usr/lib/qt/mkspecs/modules/qt_Prison.pri \
/usr/lib/qt/mkspecs/modules/qt_Qt5Keychain.pri \
/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
/usr/lib/qt/mkspecs/features/qt_functions.prf \
/usr/lib/qt/mkspecs/features/qt_config.prf \
/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
/usr/lib/qt/mkspecs/features/spec_post.prf \
../../.qmake.stash \
/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
/usr/lib/qt/mkspecs/features/toolchain.prf \
/usr/lib/qt/mkspecs/features/default_pre.prf \
/usr/lib/qt/mkspecs/features/resolve_config.prf \
/usr/lib/qt/mkspecs/features/default_post.prf \
/usr/lib/qt/mkspecs/features/qml_debug.prf \
/usr/lib/qt/mkspecs/features/warn_on.prf \
/usr/lib/qt/mkspecs/features/qt.prf \
/usr/lib/qt/mkspecs/features/resources.prf \
/usr/lib/qt/mkspecs/features/moc.prf \
/usr/lib/qt/mkspecs/features/unix/opengl.prf \
/usr/lib/qt/mkspecs/features/uic.prf \
/usr/lib/qt/mkspecs/features/unix/thread.prf \
/usr/lib/qt/mkspecs/features/qmake_use.prf \
/usr/lib/qt/mkspecs/features/file_copies.prf \
/usr/lib/qt/mkspecs/features/testcase_targets.prf \
/usr/lib/qt/mkspecs/features/exceptions.prf \
/usr/lib/qt/mkspecs/features/yacc.prf \
/usr/lib/qt/mkspecs/features/lex.prf \
../../MS-unittests.pro ../../file/File.h \
../../ticker/TickerInfoDownloader.h \
../../ticker/TickerItem.h \
../catch.hpp ../../file/File.cpp \
../unittestmain.cpp \
../../ticker/TickerInfoDownloader.cpp \
../../ticker/TickerItem.cpp
QMAKE_TARGET = unittests
DESTDIR =
TARGET = unittests
first: all
####### Build rules
unittests: $(OBJECTS)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
Makefile: ../MS-unittests.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mkspecs/features/spec_pre.prf \
/usr/lib/qt/mkspecs/common/unix.conf \
/usr/lib/qt/mkspecs/common/linux.conf \
/usr/lib/qt/mkspecs/common/sanitize.conf \
/usr/lib/qt/mkspecs/common/gcc-base.conf \
/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
/usr/lib/qt/mkspecs/common/g++-base.conf \
/usr/lib/qt/mkspecs/common/g++-unix.conf \
/usr/lib/qt/mkspecs/qconfig.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri \
/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
/usr/lib/qt/mkspecs/modules/qt_Baloo.pri \
/usr/lib/qt/mkspecs/modules/qt_BluezQt.pri \
/usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayClient.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayCommon.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayCore.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayKItemModels.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayLauncher.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayLauncherUi.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayProbe.pri \
/usr/lib/qt/mkspecs/modules/qt_GammaRayUi.pri \
/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
/usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri \
/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
/usr/lib/qt/mkspecs/modules/qt_KCalCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KCddb.pri \
/usr/lib/qt/mkspecs/modules/qt_KChart.pri \
/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KContacts.pri \
/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri \
/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
/usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri \
/usr/lib/qt/mkspecs/modules/qt_KGantt.pri \
/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KHolidays.pri \
/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \
/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri \
/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri \
/usr/lib/qt/mkspecs/modules/qt_KMime.pri \
/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
/usr/lib/qt/mkspecs/modules/qt_KPeople.pri \
/usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
/usr/lib/qt/mkspecs/modules/qt_KrossCore.pri \
/usr/lib/qt/mkspecs/modules/qt_KrossUi.pri \
/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
/usr/lib/qt/mkspecs/modules/qt_KService.pri \
/usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri \
/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
/usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri \
/usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri \
/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3danimation_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gamepad.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gamepad_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_remoteobjects.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_remoteobjects_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_repparser.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_repparser_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scxml.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_scxml_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialbus.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialbus_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webview.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_webview_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
/usr/lib/qt/mkspecs/modules/qt_Marble.pri \
/usr/lib/qt/mkspecs/modules/qt_ModemManagerQt.pri \
/usr/lib/qt/mkspecs/modules/qt_NetworkManagerQt.pri \
/usr/lib/qt/mkspecs/modules/qt_OktetaCore.pri \
/usr/lib/qt/mkspecs/modules/qt_OktetaGui.pri \
/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
/usr/lib/qt/mkspecs/modules/qt_Prison.pri \
/usr/lib/qt/mkspecs/modules/qt_Qt5Keychain.pri \
/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
/usr/lib/qt/mkspecs/features/qt_functions.prf \
/usr/lib/qt/mkspecs/features/qt_config.prf \
/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
/usr/lib/qt/mkspecs/features/spec_post.prf \
../.qmake.stash \
/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
/usr/lib/qt/mkspecs/features/toolchain.prf \
/usr/lib/qt/mkspecs/features/default_pre.prf \
/usr/lib/qt/mkspecs/features/resolve_config.prf \
/usr/lib/qt/mkspecs/features/default_post.prf \
/usr/lib/qt/mkspecs/features/qml_debug.prf \
/usr/lib/qt/mkspecs/features/warn_on.prf \
/usr/lib/qt/mkspecs/features/qt.prf \
/usr/lib/qt/mkspecs/features/resources.prf \
/usr/lib/qt/mkspecs/features/moc.prf \
/usr/lib/qt/mkspecs/features/unix/opengl.prf \
/usr/lib/qt/mkspecs/features/uic.prf \
/usr/lib/qt/mkspecs/features/unix/thread.prf \
/usr/lib/qt/mkspecs/features/qmake_use.prf \
/usr/lib/qt/mkspecs/features/file_copies.prf \
/usr/lib/qt/mkspecs/features/testcase_targets.prf \
/usr/lib/qt/mkspecs/features/exceptions.prf \
/usr/lib/qt/mkspecs/features/yacc.prf \
/usr/lib/qt/mkspecs/features/lex.prf \
../MS-unittests.pro
$(QMAKE) -o Makefile ../MS-unittests.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug
/usr/lib/qt/mkspecs/features/spec_pre.prf:
/usr/lib/qt/mkspecs/common/unix.conf:
/usr/lib/qt/mkspecs/common/linux.conf:
/usr/lib/qt/mkspecs/common/sanitize.conf:
/usr/lib/qt/mkspecs/common/gcc-base.conf:
/usr/lib/qt/mkspecs/common/gcc-base-unix.conf:
/usr/lib/qt/mkspecs/common/g++-base.conf:
/usr/lib/qt/mkspecs/common/g++-unix.conf:
/usr/lib/qt/mkspecs/qconfig.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiAgentBase.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiContact.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiCore.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_AkonadiXml.pri:
/usr/lib/qt/mkspecs/modules/qt_Attica.pri:
/usr/lib/qt/mkspecs/modules/qt_Baloo.pri:
/usr/lib/qt/mkspecs/modules/qt_BluezQt.pri:
/usr/lib/qt/mkspecs/modules/qt_ContactEditor.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayClient.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayCommon.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayCore.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayKItemModels.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayLauncher.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayLauncherUi.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayProbe.pri:
/usr/lib/qt/mkspecs/modules/qt_GammaRayUi.pri:
/usr/lib/qt/mkspecs/modules/qt_KActivities.pri:
/usr/lib/qt/mkspecs/modules/qt_KActivitiesStats.pri:
/usr/lib/qt/mkspecs/modules/qt_KArchive.pri:
/usr/lib/qt/mkspecs/modules/qt_KAuth.pri:
/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri:
/usr/lib/qt/mkspecs/modules/qt_KCalCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KCddb.pri:
/usr/lib/qt/mkspecs/modules/qt_KChart.pri:
/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri:
/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri:
/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri:
/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri:
/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KContacts.pri:
/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KCrash.pri:
/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri:
/usr/lib/qt/mkspecs/modules/qt_KDESu.pri:
/usr/lib/qt/mkspecs/modules/qt_KDNSSD.pri:
/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri:
/usr/lib/qt/mkspecs/modules/qt_KFileMetaData.pri:
/usr/lib/qt/mkspecs/modules/qt_KGantt.pri:
/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri:
/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KHolidays.pri:
/usr/lib/qt/mkspecs/modules/qt_KHtml.pri:
/usr/lib/qt/mkspecs/modules/qt_KI18n.pri:
/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri:
/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri:
/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_Kirigami2.pri:
/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri:
/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri:
/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KJS.pri:
/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri:
/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri:
/usr/lib/qt/mkspecs/modules/qt_KMime.pri:
/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri:
/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri:
/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri:
/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri:
/usr/lib/qt/mkspecs/modules/qt_KParts.pri:
/usr/lib/qt/mkspecs/modules/qt_KPeople.pri:
/usr/lib/qt/mkspecs/modules/qt_KPeopleWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri:
/usr/lib/qt/mkspecs/modules/qt_KPty.pri:
/usr/lib/qt/mkspecs/modules/qt_KrossCore.pri:
/usr/lib/qt/mkspecs/modules/qt_KrossUi.pri:
/usr/lib/qt/mkspecs/modules/qt_KRunner.pri:
/usr/lib/qt/mkspecs/modules/qt_KScreen.pri:
/usr/lib/qt/mkspecs/modules/qt_KService.pri:
/usr/lib/qt/mkspecs/modules/qt_KSyntaxHighlighting.pri:
/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri:
/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri:
/usr/lib/qt/mkspecs/modules/qt_KWallet.pri:
/usr/lib/qt/mkspecs/modules/qt_KWaylandClient.pri:
/usr/lib/qt/mkspecs/modules/qt_KWaylandServer.pri:
/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri:
/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3danimation.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3danimation_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_charts.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_core.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_edid_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_gamepad.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_gamepad_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_help.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_kms_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_location.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimediagsttools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_network.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_positioningquick_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickshapes_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_remoteobjects.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_remoteobjects_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_repparser.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_repparser_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_script.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_scxml.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_scxml_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_serialbus.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_serialbus_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_vulkan_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webview.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_webview_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xkbcommon_support_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri:
/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
/usr/lib/qt/mkspecs/modules/qt_Marble.pri:
/usr/lib/qt/mkspecs/modules/qt_ModemManagerQt.pri:
/usr/lib/qt/mkspecs/modules/qt_NetworkManagerQt.pri:
/usr/lib/qt/mkspecs/modules/qt_OktetaCore.pri:
/usr/lib/qt/mkspecs/modules/qt_OktetaGui.pri:
/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri:
/usr/lib/qt/mkspecs/modules/qt_Prison.pri:
/usr/lib/qt/mkspecs/modules/qt_Qt5Keychain.pri:
/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri:
/usr/lib/qt/mkspecs/modules/qt_Solid.pri:
/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri:
/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri:
/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri:
/usr/lib/qt/mkspecs/features/qt_functions.prf:
/usr/lib/qt/mkspecs/features/qt_config.prf:
/usr/lib/qt/mkspecs/linux-g++/qmake.conf:
/usr/lib/qt/mkspecs/features/spec_post.prf:
../.qmake.stash:
/usr/lib/qt/mkspecs/features/exclusive_builds.prf:
/usr/lib/qt/mkspecs/features/toolchain.prf:
/usr/lib/qt/mkspecs/features/default_pre.prf:
/usr/lib/qt/mkspecs/features/resolve_config.prf:
/usr/lib/qt/mkspecs/features/default_post.prf:
/usr/lib/qt/mkspecs/features/qml_debug.prf:
/usr/lib/qt/mkspecs/features/warn_on.prf:
/usr/lib/qt/mkspecs/features/qt.prf:
/usr/lib/qt/mkspecs/features/resources.prf:
/usr/lib/qt/mkspecs/features/moc.prf:
/usr/lib/qt/mkspecs/features/unix/opengl.prf:
/usr/lib/qt/mkspecs/features/uic.prf:
/usr/lib/qt/mkspecs/features/unix/thread.prf:
/usr/lib/qt/mkspecs/features/qmake_use.prf:
/usr/lib/qt/mkspecs/features/file_copies.prf:
/usr/lib/qt/mkspecs/features/testcase_targets.prf:
/usr/lib/qt/mkspecs/features/exceptions.prf:
/usr/lib/qt/mkspecs/features/yacc.prf:
/usr/lib/qt/mkspecs/features/lex.prf:
../MS-unittests.pro:
qmake: FORCE
@$(QMAKE) -o Makefile ../MS-unittests.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug
qmake_all: FORCE
all: Makefile unittests
dist: distdir FORCE
(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
distdir: FORCE
@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
$(COPY_FILE) --parents /usr/lib/qt/mkspecs/features/data/dummy.cpp $(DISTDIR)/
$(COPY_FILE) --parents ../../file/File.h ../../ticker/TickerInfoDownloader.h ../../ticker/TickerItem.h ../catch.hpp $(DISTDIR)/
$(COPY_FILE) --parents ../../file/File.cpp ../unittestmain.cpp ../../ticker/TickerInfoDownloader.cpp ../../ticker/TickerItem.cpp $(DISTDIR)/
clean: compiler_clean
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core
distclean: clean
-$(DEL_FILE) $(TARGET)
-$(DEL_FILE) Makefile
####### Sub-libraries
mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all
check: first
benchmark: first
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_moc_predefs_make_all: moc_predefs.h
compiler_moc_predefs_clean:
-$(DEL_FILE) moc_predefs.h
moc_predefs.h: /usr/lib/qt/mkspecs/features/data/dummy.cpp
g++ -pipe -g -Wall -W -dM -E -o moc_predefs.h /usr/lib/qt/mkspecs/features/data/dummy.cpp
compiler_moc_header_make_all:
compiler_moc_header_clean:
compiler_moc_objc_header_make_all:
compiler_moc_objc_header_clean:
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all:
compiler_uic_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_predefs_clean
####### Compile
File.o: ../../file/File.cpp ../../file/File.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o File.o ../../file/File.cpp
unittestmain.o: ../unittestmain.cpp ../../ticker/TickerItem.h \
../../ticker/TickerInfoDownloader.h \
../catch.hpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o unittestmain.o ../unittestmain.cpp
TickerInfoDownloader.o: ../../ticker/TickerInfoDownloader.cpp ../../file/File.h \
../../ticker/TickerInfoDownloader.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o TickerInfoDownloader.o ../../ticker/TickerInfoDownloader.cpp
TickerItem.o: ../../ticker/TickerItem.cpp ../../file/File.h \
../../ticker/TickerItem.h \
../../ticker/TickerInfoDownloader.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o TickerItem.o ../../ticker/TickerItem.cpp
####### Install
install: FORCE
uninstall: FORCE
FORCE:
MiniStocks-file-not-found-fix/StockTicker/unittests/catch.hpp 0000664 0000000 0000000 00001560550 13611152477 0024656 0 ustar 00root root 0000000 0000000 /*
* Catch v2.2.3
* Generated: 2018-06-06 23:11:57.601416
* ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2018 Two Blue Cubes Ltd. All rights reserved.
*
* Distributed under the Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*/
#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED
// start catch.hpp
#define CATCH_VERSION_MAJOR 2
#define CATCH_VERSION_MINOR 2
#define CATCH_VERSION_PATCH 3
#ifdef __clang__
# pragma clang system_header
#elif defined __GNUC__
# pragma GCC system_header
#endif
// start catch_suppress_warnings.h
#ifdef __clang__
# ifdef __ICC // icpc defines the __clang__ macro
# pragma warning(push)
# pragma warning(disable: 161 1682)
# else // __ICC
# pragma clang diagnostic ignored "-Wunused-variable"
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wpadded"
# pragma clang diagnostic ignored "-Wswitch-enum"
# pragma clang diagnostic ignored "-Wcovered-switch-default"
# endif
#elif defined __GNUC__
# pragma GCC diagnostic ignored "-Wparentheses"
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wunused-variable"
# pragma GCC diagnostic ignored "-Wpadded"
#endif
// end catch_suppress_warnings.h
#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
# define CATCH_IMPL
# define CATCH_CONFIG_ALL_PARTS
#endif
// In the impl file, we want to have access to all parts of the headers
// Can also be used to sanely support PCHs
#if defined(CATCH_CONFIG_ALL_PARTS)
# define CATCH_CONFIG_EXTERNAL_INTERFACES
# if defined(CATCH_CONFIG_DISABLE_MATCHERS)
# undef CATCH_CONFIG_DISABLE_MATCHERS
# endif
# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
#endif
#if !defined(CATCH_CONFIG_IMPL_ONLY)
// start catch_platform.h
#ifdef __APPLE__
# include
# if TARGET_OS_OSX == 1
# define CATCH_PLATFORM_MAC
# elif TARGET_OS_IPHONE == 1
# define CATCH_PLATFORM_IPHONE
# endif
#elif defined(linux) || defined(__linux) || defined(__linux__)
# define CATCH_PLATFORM_LINUX
#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__)
# define CATCH_PLATFORM_WINDOWS
#endif
// end catch_platform.h
#ifdef CATCH_IMPL
# ifndef CLARA_CONFIG_MAIN
# define CLARA_CONFIG_MAIN_NOT_DEFINED
# define CLARA_CONFIG_MAIN
# endif
#endif
// start catch_user_interfaces.h
namespace Catch {
unsigned int rngSeed();
}
// end catch_user_interfaces.h
// start catch_tag_alias_autoregistrar.h
// start catch_common.h
// start catch_compiler_capabilities.h
// Detect a number of compiler features - by compiler
// The following features are defined:
//
// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported?
// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported?
// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported?
// ****************
// Note to maintainers: if new toggles are added please document them
// in configuration.md, too
// ****************
// In general each macro has a _NO_ form
// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature.
// Many features, at point of detection, define an _INTERNAL_ macro, so they
// can be combined, en-mass, with the _NO_ forms later.
#ifdef __cplusplus
# if __cplusplus >= 201402L
# define CATCH_CPP14_OR_GREATER
# endif
# if __cplusplus >= 201703L
# define CATCH_CPP17_OR_GREATER
# endif
#endif
#if defined(CATCH_CPP17_OR_GREATER)
# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
#endif
#ifdef __clang__
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
_Pragma( "clang diagnostic push" ) \
_Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \
_Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"")
# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
_Pragma( "clang diagnostic pop" )
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \
_Pragma( "clang diagnostic push" ) \
_Pragma( "clang diagnostic ignored \"-Wparentheses\"" )
# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \
_Pragma( "clang diagnostic pop" )
#endif // __clang__
////////////////////////////////////////////////////////////////////////////////
// Assume that non-Windows platforms support posix signals by default
#if !defined(CATCH_PLATFORM_WINDOWS)
#define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS
#endif
////////////////////////////////////////////////////////////////////////////////
// We know some environments not to support full POSIX signals
#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__)
#define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
#endif
#ifdef __OS400__
# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS
# define CATCH_CONFIG_COLOUR_NONE
#endif
////////////////////////////////////////////////////////////////////////////////
// Android somehow still does not support std::to_string
#if defined(__ANDROID__)
# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING
#endif
////////////////////////////////////////////////////////////////////////////////
// Not all Windows environments support SEH properly
#if defined(__MINGW32__)
# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH
#endif
////////////////////////////////////////////////////////////////////////////////
// Cygwin
#ifdef __CYGWIN__
// Required for some versions of Cygwin to declare gettimeofday
// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin
# define _BSD_SOURCE
#endif // __CYGWIN__
////////////////////////////////////////////////////////////////////////////////
// Visual C++
#ifdef _MSC_VER
# if _MSC_VER >= 1900 // Visual Studio 2015 or newer
# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
# endif
// Universal Windows platform does not support SEH
// Or console colours (or console at all...)
# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
# define CATCH_CONFIG_COLOUR_NONE
# else
# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH
# endif
#endif // _MSC_VER
////////////////////////////////////////////////////////////////////////////////
// DJGPP
#ifdef __DJGPP__
# define CATCH_INTERNAL_CONFIG_NO_WCHAR
#endif // __DJGPP__
////////////////////////////////////////////////////////////////////////////////
// Use of __COUNTER__ is suppressed during code analysis in
// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly
// handled by it.
// Otherwise all supported compilers support COUNTER macro,
// but user still might want to turn it off
#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L )
#define CATCH_INTERNAL_CONFIG_COUNTER
#endif
#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER)
# define CATCH_CONFIG_COUNTER
#endif
#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH)
# define CATCH_CONFIG_WINDOWS_SEH
#endif
// This is set by default, because we assume that unix compilers are posix-signal-compatible by default.
#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS)
# define CATCH_CONFIG_POSIX_SIGNALS
#endif
// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions.
#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR)
# define CATCH_CONFIG_WCHAR
#endif
#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING)
# define CATCH_CONFIG_CPP11_TO_STRING
#endif
#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS)
# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
#endif
#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS)
# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS
# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS
#endif
#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS)
# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS
#endif
// end catch_compiler_capabilities.h
#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
#ifdef CATCH_CONFIG_COUNTER
# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ )
#else
# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
#endif
#include
#include
#include
namespace Catch {
struct CaseSensitive { enum Choice {
Yes,
No
}; };
class NonCopyable {
NonCopyable( NonCopyable const& ) = delete;
NonCopyable( NonCopyable && ) = delete;
NonCopyable& operator = ( NonCopyable const& ) = delete;
NonCopyable& operator = ( NonCopyable && ) = delete;
protected:
NonCopyable();
virtual ~NonCopyable();
};
struct SourceLineInfo {
SourceLineInfo() = delete;
SourceLineInfo( char const* _file, std::size_t _line ) noexcept
: file( _file ),
line( _line )
{}
SourceLineInfo( SourceLineInfo const& other ) = default;
SourceLineInfo( SourceLineInfo && ) = default;
SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
SourceLineInfo& operator = ( SourceLineInfo && ) = default;
bool empty() const noexcept;
bool operator == ( SourceLineInfo const& other ) const noexcept;
bool operator < ( SourceLineInfo const& other ) const noexcept;
char const* file;
std::size_t line;
};
std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info );
// Use this in variadic streaming macros to allow
// >> +StreamEndStop
// as well as
// >> stuff +StreamEndStop
struct StreamEndStop {
std::string operator+() const;
};
template
T const& operator + ( T const& value, StreamEndStop ) {
return value;
}
}
#define CATCH_INTERNAL_LINEINFO \
::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) )
// end catch_common.h
namespace Catch {
struct RegistrarForTagAliases {
RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo );
};
} // end namespace Catch
#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \
CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS
// end catch_tag_alias_autoregistrar.h
// start catch_test_registry.h
// start catch_interfaces_testcase.h
#include
#include
namespace Catch {
class TestSpec;
struct ITestInvoker {
virtual void invoke () const = 0;
virtual ~ITestInvoker();
};
using ITestCasePtr = std::shared_ptr;
class TestCase;
struct IConfig;
struct ITestCaseRegistry {
virtual ~ITestCaseRegistry();
virtual std::vector const& getAllTests() const = 0;
virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0;
};
bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config );
std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config );
std::vector const& getAllTestCasesSorted( IConfig const& config );
}
// end catch_interfaces_testcase.h
// start catch_stringref.h
#include
#include
#include
namespace Catch {
class StringData;
/// A non-owning string class (similar to the forthcoming std::string_view)
/// Note that, because a StringRef may be a substring of another string,
/// it may not be null terminated. c_str() must return a null terminated
/// string, however, and so the StringRef will internally take ownership
/// (taking a copy), if necessary. In theory this ownership is not externally
/// visible - but it does mean (substring) StringRefs should not be shared between
/// threads.
class StringRef {
public:
using size_type = std::size_t;
private:
friend struct StringRefTestAccess;
char const* m_start;
size_type m_size;
char* m_data = nullptr;
void takeOwnership();
static constexpr char const* const s_empty = "";
public: // construction/ assignment
StringRef() noexcept
: StringRef( s_empty, 0 )
{}
StringRef( StringRef const& other ) noexcept
: m_start( other.m_start ),
m_size( other.m_size )
{}
StringRef( StringRef&& other ) noexcept
: m_start( other.m_start ),
m_size( other.m_size ),
m_data( other.m_data )
{
other.m_data = nullptr;
}
StringRef( char const* rawChars ) noexcept;
StringRef( char const* rawChars, size_type size ) noexcept
: m_start( rawChars ),
m_size( size )
{}
StringRef( std::string const& stdString ) noexcept
: m_start( stdString.c_str() ),
m_size( stdString.size() )
{}
~StringRef() noexcept {
delete[] m_data;
}
auto operator = ( StringRef const &other ) noexcept -> StringRef& {
delete[] m_data;
m_data = nullptr;
m_start = other.m_start;
m_size = other.m_size;
return *this;
}
operator std::string() const;
void swap( StringRef& other ) noexcept;
public: // operators
auto operator == ( StringRef const& other ) const noexcept -> bool;
auto operator != ( StringRef const& other ) const noexcept -> bool;
auto operator[] ( size_type index ) const noexcept -> char;
public: // named queries
auto empty() const noexcept -> bool {
return m_size == 0;
}
auto size() const noexcept -> size_type {
return m_size;
}
auto numberOfCharacters() const noexcept -> size_type;
auto c_str() const -> char const*;
public: // substrings and searches
auto substr( size_type start, size_type size ) const noexcept -> StringRef;
// Returns the current start pointer.
// Note that the pointer can change when if the StringRef is a substring
auto currentData() const noexcept -> char const*;
private: // ownership queries - may not be consistent between calls
auto isOwned() const noexcept -> bool;
auto isSubstring() const noexcept -> bool;
};
auto operator + ( StringRef const& lhs, StringRef const& rhs ) -> std::string;
auto operator + ( StringRef const& lhs, char const* rhs ) -> std::string;
auto operator + ( char const* lhs, StringRef const& rhs ) -> std::string;
auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&;
auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&;
inline auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef {
return StringRef( rawChars, size );
}
} // namespace Catch
// end catch_stringref.h
namespace Catch {
template
class TestInvokerAsMethod : public ITestInvoker {
void (C::*m_testAsMethod)();
public:
TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {}
void invoke() const override {
C obj;
(obj.*m_testAsMethod)();
}
};
auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker*;
template
auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInvoker* {
return new(std::nothrow) TestInvokerAsMethod( testAsMethod );
}
struct NameAndTags {
NameAndTags( StringRef const& name_ = StringRef(), StringRef const& tags_ = StringRef() ) noexcept;
StringRef name;
StringRef tags;
};
struct AutoReg : NonCopyable {
AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept;
~AutoReg();
};
} // end namespace Catch
#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param)
#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__
#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__
#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF
#if defined(CATCH_CONFIG_DISABLE)
#define INTERNAL_CATCH_TESTCASE_NO_REGISTRATION( TestName, ... ) \
static void TestName()
#define INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION( TestName, ClassName, ... ) \
namespace{ \
struct TestName : INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF ClassName) { \
void test(); \
}; \
} \
void TestName::test()
#endif
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
static void TestName(); \
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &TestName ), CATCH_INTERNAL_LINEINFO, "", Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
static void TestName()
#define INTERNAL_CATCH_TESTCASE( ... ) \
INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), __VA_ARGS__ )
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &QualifiedMethod ), CATCH_INTERNAL_LINEINFO, "&" #QualifiedMethod, Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
namespace{ \
struct TestName : INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF ClassName) { \
void test(); \
}; \
Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( Catch::makeTestInvoker( &TestName::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
} \
CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
void TestName::test()
#define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \
INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, __VA_ARGS__ )
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( Function ), CATCH_INTERNAL_LINEINFO, "", Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS
// end catch_test_registry.h
// start catch_capture.hpp
// start catch_assertionhandler.h
// start catch_assertioninfo.h
// start catch_result_type.h
namespace Catch {
// ResultWas::OfType enum
struct ResultWas { enum OfType {
Unknown = -1,
Ok = 0,
Info = 1,
Warning = 2,
FailureBit = 0x10,
ExpressionFailed = FailureBit | 1,
ExplicitFailure = FailureBit | 2,
Exception = 0x100 | FailureBit,
ThrewException = Exception | 1,
DidntThrowException = Exception | 2,
FatalErrorCondition = 0x200 | FailureBit
}; };
bool isOk( ResultWas::OfType resultType );
bool isJustInfo( int flags );
// ResultDisposition::Flags enum
struct ResultDisposition { enum Flags {
Normal = 0x01,
ContinueOnFailure = 0x02, // Failures fail test, but execution continues
FalseTest = 0x04, // Prefix expression with !
SuppressFail = 0x08 // Failures are reported but do not fail the test
}; };
ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs );
bool shouldContinueOnFailure( int flags );
inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; }
bool shouldSuppressFailure( int flags );
} // end namespace Catch
// end catch_result_type.h
namespace Catch {
struct AssertionInfo
{
StringRef macroName;
SourceLineInfo lineInfo;
StringRef capturedExpression;
ResultDisposition::Flags resultDisposition;
// We want to delete this constructor but a compiler bug in 4.8 means
// the struct is then treated as non-aggregate
//AssertionInfo() = delete;
};
} // end namespace Catch
// end catch_assertioninfo.h
// start catch_decomposer.h
// start catch_tostring.h
#include
#include
#include
#include
// start catch_stream.h
#include
#include
#include
namespace Catch {
std::ostream& cout();
std::ostream& cerr();
std::ostream& clog();
class StringRef;
struct IStream {
virtual ~IStream();
virtual std::ostream& stream() const = 0;
};
auto makeStream( StringRef const &filename ) -> IStream const*;
class ReusableStringStream {
std::size_t m_index;
std::ostream* m_oss;
public:
ReusableStringStream();
~ReusableStringStream();
auto str() const -> std::string;
template
auto operator << ( T const& value ) -> ReusableStringStream& {
*m_oss << value;
return *this;
}
auto get() -> std::ostream& { return *m_oss; }
static void cleanup();
};
}
// end catch_stream.h
#ifdef __OBJC__
// start catch_objc_arc.hpp
#import
#ifdef __has_feature
#define CATCH_ARC_ENABLED __has_feature(objc_arc)
#else
#define CATCH_ARC_ENABLED 0
#endif
void arcSafeRelease( NSObject* obj );
id performOptionalSelector( id obj, SEL sel );
#if !CATCH_ARC_ENABLED
inline void arcSafeRelease( NSObject* obj ) {
[obj release];
}
inline id performOptionalSelector( id obj, SEL sel ) {
if( [obj respondsToSelector: sel] )
return [obj performSelector: sel];
return nil;
}
#define CATCH_UNSAFE_UNRETAINED
#define CATCH_ARC_STRONG
#else
inline void arcSafeRelease( NSObject* ){}
inline id performOptionalSelector( id obj, SEL sel ) {
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
#endif
if( [obj respondsToSelector: sel] )
return [obj performSelector: sel];
#ifdef __clang__
#pragma clang diagnostic pop
#endif
return nil;
}
#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained
#define CATCH_ARC_STRONG __strong
#endif
// end catch_objc_arc.hpp
#endif
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless
#endif
// We need a dummy global operator<< so we can bring it into Catch namespace later
struct Catch_global_namespace_dummy {};
std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
namespace Catch {
// Bring in operator<< from global namespace into Catch namespace
using ::operator<<;
namespace Detail {
extern const std::string unprintableString;
std::string rawMemoryToString( const void *object, std::size_t size );
template
std::string rawMemoryToString( const T& object ) {
return rawMemoryToString( &object, sizeof(object) );
}
template
class IsStreamInsertable {
template
static auto test(int)
-> decltype(std::declval() << std::declval(), std::true_type());
template
static auto test(...)->std::false_type;
public:
static const bool value = decltype(test(0))::value;
};
template
std::string convertUnknownEnumToString( E e );
template
typename std::enable_if<
!std::is_enum::value && !std::is_base_of::value,
std::string>::type convertUnstreamable( T const& ) {
return Detail::unprintableString;
}
template
typename std::enable_if<
!std::is_enum::value && std::is_base_of::value,
std::string>::type convertUnstreamable(T const& ex) {
return ex.what();
}
template
typename std::enable_if<
std::is_enum::value
, std::string>::type convertUnstreamable( T const& value ) {
return convertUnknownEnumToString( value );
}
#if defined(_MANAGED)
//! Convert a CLR string to a utf8 std::string
template
std::string clrReferenceToString( T^ ref ) {
if (ref == nullptr)
return std::string("null");
auto bytes = System::Text::Encoding::UTF8->GetBytes(ref->ToString());
cli::pin_ptr p = &bytes[0];
return std::string(reinterpret_cast(p), bytes->Length);
}
#endif
} // namespace Detail
// If we decide for C++14, change these to enable_if_ts
template
struct StringMaker {
template
static
typename std::enable_if<::Catch::Detail::IsStreamInsertable::value, std::string>::type
convert(const Fake& value) {
ReusableStringStream rss;
// NB: call using the function-like syntax to avoid ambiguity with
// user-defined templated operator<< under clang.
rss.operator<<(value);
return rss.str();
}
template
static
typename std::enable_if::value, std::string>::type
convert( const Fake& value ) {
#if !defined(CATCH_CONFIG_FALLBACK_STRINGIFIER)
return Detail::convertUnstreamable(value);
#else
return CATCH_CONFIG_FALLBACK_STRINGIFIER(value);
#endif
}
};
namespace Detail {
// This function dispatches all stringification requests inside of Catch.
// Should be preferably called fully qualified, like ::Catch::Detail::stringify
template
std::string stringify(const T& e) {
return ::Catch::StringMaker::type>::type>::convert(e);
}
template
std::string convertUnknownEnumToString( E e ) {
return ::Catch::Detail::stringify(static_cast::type>(e));
}
#if defined(_MANAGED)
template
std::string stringify( T^ e ) {
return ::Catch::StringMaker::convert(e);
}
#endif
} // namespace Detail
// Some predefined specializations
template<>
struct StringMaker {
static std::string convert(const std::string& str);
};
#ifdef CATCH_CONFIG_WCHAR
template<>
struct StringMaker {
static std::string convert(const std::wstring& wstr);
};
#endif
template<>
struct StringMaker {
static std::string convert(char const * str);
};
template<>
struct StringMaker {
static std::string convert(char * str);
};
#ifdef CATCH_CONFIG_WCHAR
template<>
struct StringMaker {
static std::string convert(wchar_t const * str);
};
template<>
struct StringMaker {
static std::string convert(wchar_t * str);
};
#endif
// TBD: Should we use `strnlen` to ensure that we don't go out of the buffer,
// while keeping string semantics?
template
struct StringMaker {
static std::string convert(char const* str) {
return ::Catch::Detail::stringify(std::string{ str });
}
};
template
struct StringMaker {
static std::string convert(signed char const* str) {
return ::Catch::Detail::stringify(std::string{ reinterpret_cast(str) });
}
};
template
struct StringMaker {
static std::string convert(unsigned char const* str) {
return ::Catch::Detail::stringify(std::string{ reinterpret_cast(str) });
}
};
template<>
struct StringMaker {
static std::string convert(int value);
};
template<>
struct StringMaker {
static std::string convert(long value);
};
template<>
struct StringMaker {
static std::string convert(long long value);
};
template<>
struct StringMaker {
static std::string convert(unsigned int value);
};
template<>
struct StringMaker {
static std::string convert(unsigned long value);
};
template<>
struct StringMaker {
static std::string convert(unsigned long long value);
};
template<>
struct StringMaker {
static std::string convert(bool b);
};
template<>
struct StringMaker {
static std::string convert(char c);
};
template<>
struct StringMaker {
static std::string convert(signed char c);
};
template<>
struct StringMaker {
static std::string convert(unsigned char c);
};
template<>
struct StringMaker {
static std::string convert(std::nullptr_t);
};
template<>
struct StringMaker {
static std::string convert(float value);
};
template<>
struct StringMaker {
static std::string convert(double value);
};
template
struct StringMaker {
template
static std::string convert(U* p) {
if (p) {
return ::Catch::Detail::rawMemoryToString(p);
} else {
return "nullptr";
}
}
};
template
struct StringMaker {
static std::string convert(R C::* p) {
if (p) {
return ::Catch::Detail::rawMemoryToString(p);
} else {
return "nullptr";
}
}
};
#if defined(_MANAGED)
template
struct StringMaker {
static std::string convert( T^ ref ) {
return ::Catch::Detail::clrReferenceToString(ref);
}
};
#endif
namespace Detail {
template
std::string rangeToString(InputIterator first, InputIterator last) {
ReusableStringStream rss;
rss << "{ ";
if (first != last) {
rss << ::Catch::Detail::stringify(*first);
for (++first; first != last; ++first)
rss << ", " << ::Catch::Detail::stringify(*first);
}
rss << " }";
return rss.str();
}
}
#ifdef __OBJC__
template<>
struct StringMaker {
static std::string convert(NSString * nsstring) {
if (!nsstring)
return "nil";
return std::string("@") + [nsstring UTF8String];
}
};
template<>
struct StringMaker {
static std::string convert(NSObject* nsObject) {
return ::Catch::Detail::stringify([nsObject description]);
}
};
namespace Detail {
inline std::string stringify( NSString* nsstring ) {
return StringMaker::convert( nsstring );
}
} // namespace Detail
#endif // __OBJC__
} // namespace Catch
//////////////////////////////////////////////////////
// Separate std-lib types stringification, so it can be selectively enabled
// This means that we do not bring in
#if defined(CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS)
# define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
# define CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
#endif
// Separate std::pair specialization
#if defined(CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER)
#include
namespace Catch {
template
struct StringMaker > {
static std::string convert(const std::pair& pair) {
ReusableStringStream rss;
rss << "{ "
<< ::Catch::Detail::stringify(pair.first)
<< ", "
<< ::Catch::Detail::stringify(pair.second)
<< " }";
return rss.str();
}
};
}
#endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
// Separate std::tuple specialization
#if defined(CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER)
#include
namespace Catch {
namespace Detail {
template<
typename Tuple,
std::size_t N = 0,
bool = (N < std::tuple_size::value)
>
struct TupleElementPrinter {
static void print(const Tuple& tuple, std::ostream& os) {
os << (N ? ", " : " ")
<< ::Catch::Detail::stringify(std::get(tuple));
TupleElementPrinter::print(tuple, os);
}
};
template<
typename Tuple,
std::size_t N
>
struct TupleElementPrinter {
static void print(const Tuple&, std::ostream&) {}
};
}
template
struct StringMaker> {
static std::string convert(const std::tuple& tuple) {
ReusableStringStream rss;
rss << '{';
Detail::TupleElementPrinter>::print(tuple, rss.get());
rss << " }";
return rss.str();
}
};
}
#endif // CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
namespace Catch {
struct not_this_one {}; // Tag type for detecting which begin/ end are being selected
// Import begin/ end from std here so they are considered alongside the fallback (...) overloads in this namespace
using std::begin;
using std::end;
not_this_one begin( ... );
not_this_one end( ... );
template
struct is_range {
static const bool value =
!std::is_same())), not_this_one>::value &&
!std::is_same())), not_this_one>::value;
};
#if defined(_MANAGED) // Managed types are never ranges
template
struct is_range {
static const bool value = false;
};
#endif
template
std::string rangeToString( Range const& range ) {
return ::Catch::Detail::rangeToString( begin( range ), end( range ) );
}
// Handle vector specially
template
std::string rangeToString( std::vector const& v ) {
ReusableStringStream rss;
rss << "{ ";
bool first = true;
for( bool b : v ) {
if( first )
first = false;
else
rss << ", ";
rss << ::Catch::Detail::stringify( b );
}
rss << " }";
return rss.str();
}
template
struct StringMaker::value && !::Catch::Detail::IsStreamInsertable::value>::type> {
static std::string convert( R const& range ) {
return rangeToString( range );
}
};
template
struct StringMaker {
static std::string convert(T const(&arr)[SZ]) {
return rangeToString(arr);
}
};
} // namespace Catch
// Separate std::chrono::duration specialization
#if defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER)
#include
#include
#include
namespace Catch {
template
struct ratio_string {
static std::string symbol();
};
template
std::string ratio_string::symbol() {
Catch::ReusableStringStream rss;
rss << '[' << Ratio::num << '/'
<< Ratio::den << ']';
return rss.str();
}
template <>
struct ratio_string {
static std::string symbol();
};
template <>
struct ratio_string {
static std::string symbol();
};
template <>
struct ratio_string {
static std::string symbol();
};
template <>
struct ratio_string {
static std::string symbol();
};
template <>
struct ratio_string {
static std::string symbol();
};
template <>
struct ratio_string {
static std::string symbol();
};
////////////
// std::chrono::duration specializations
template
struct StringMaker> {
static std::string convert(std::chrono::duration const& duration) {
ReusableStringStream rss;
rss << duration.count() << ' ' << ratio_string::symbol() << 's';
return rss.str();
}
};
template
struct StringMaker>> {
static std::string convert(std::chrono::duration> const& duration) {
ReusableStringStream rss;
rss << duration.count() << " s";
return rss.str();
}
};
template
struct StringMaker>> {
static std::string convert(std::chrono::duration> const& duration) {
ReusableStringStream rss;
rss << duration.count() << " m";
return rss.str();
}
};
template
struct StringMaker>> {
static std::string convert(std::chrono::duration> const& duration) {
ReusableStringStream rss;
rss << duration.count() << " h";
return rss.str();
}
};
////////////
// std::chrono::time_point specialization
// Generic time_point cannot be specialized, only std::chrono::time_point
template
struct StringMaker> {
static std::string convert(std::chrono::time_point const& time_point) {
return ::Catch::Detail::stringify(time_point.time_since_epoch()) + " since epoch";
}
};
// std::chrono::time_point specialization
template
struct StringMaker> {
static std::string convert(std::chrono::time_point const& time_point) {
auto converted = std::chrono::system_clock::to_time_t(time_point);
#ifdef _MSC_VER
std::tm timeInfo = {};
gmtime_s(&timeInfo, &converted);
#else
std::tm* timeInfo = std::gmtime(&converted);
#endif
auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
char timeStamp[timeStampSize];
const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
#ifdef _MSC_VER
std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
#else
std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
#endif
return std::string(timeStamp);
}
};
}
#endif // CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
#ifdef _MSC_VER
#pragma warning(pop)
#endif
// end catch_tostring.h
#include
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4389) // '==' : signed/unsigned mismatch
#pragma warning(disable:4018) // more "signed/unsigned mismatch"
#pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform)
#pragma warning(disable:4180) // qualifier applied to function type has no meaning
#endif
namespace Catch {
struct ITransientExpression {
auto isBinaryExpression() const -> bool { return m_isBinaryExpression; }
auto getResult() const -> bool { return m_result; }
virtual void streamReconstructedExpression( std::ostream &os ) const = 0;
ITransientExpression( bool isBinaryExpression, bool result )
: m_isBinaryExpression( isBinaryExpression ),
m_result( result )
{}
// We don't actually need a virtual destructor, but many static analysers
// complain if it's not here :-(
virtual ~ITransientExpression();
bool m_isBinaryExpression;
bool m_result;
};
void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs );
template
class BinaryExpr : public ITransientExpression {
LhsT m_lhs;
StringRef m_op;
RhsT m_rhs;
void streamReconstructedExpression( std::ostream &os ) const override {
formatReconstructedExpression
( os, Catch::Detail::stringify( m_lhs ), m_op, Catch::Detail::stringify( m_rhs ) );
}
public:
BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs )
: ITransientExpression{ true, comparisonResult },
m_lhs( lhs ),
m_op( op ),
m_rhs( rhs )
{}
};
template
class UnaryExpr : public ITransientExpression {
LhsT m_lhs;
void streamReconstructedExpression( std::ostream &os ) const override {
os << Catch::Detail::stringify( m_lhs );
}
public:
explicit UnaryExpr( LhsT lhs )
: ITransientExpression{ false, lhs ? true : false },
m_lhs( lhs )
{}
};
// Specialised comparison functions to handle equality comparisons between ints and pointers (NULL deduces as an int)
template
auto compareEqual( LhsT const& lhs, RhsT const& rhs ) -> bool { return static_cast(lhs == rhs); }
template
auto compareEqual( T* const& lhs, int rhs ) -> bool { return lhs == reinterpret_cast( rhs ); }
template
auto compareEqual( T* const& lhs, long rhs ) -> bool { return lhs == reinterpret_cast( rhs ); }
template