// xestiacalendar_testcommon.cpp - Xestia Calendar Unit Test Common Functions.
//
// (c) 2016-2017 Xestia Software Development.
//
// This file is part of Xestia Calendar.
//
// Xestia Calendar is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by the
// Free Software Foundation, version 3 of the license.
//
// Xestia Calendar is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with Xestia Calendar. If not, see
#include
#include "xestiacalendar_testcommon.h"
#include "../common/file.h"
ProcessConnectionDataFileResult ProcessConnectionDataFile(string dataFilename,
CalDAVConnectionData *connData){
ProcessConnectionDataFileResult processResult = PROCESSCONNECTIONDATAFILE_UNITTESTFAIL;
// Check if the file exists and return
// PROCESSCONNECTIONDATAFILE_MISSING if not.
if (!FileExists(dataFilename)){
return PROCESSCONNECTIONDATAFILE_MISSING;
}
ifstream fileStream;
string receivedStringData = "";
fileStream.open(dataFilename, ifstream::in);
if (fileStream.rdstate() & ifstream::failbit){
return PROCESSCONNECTIONDATAFILE_CANNOTOPEN;
}
if (fileStream.rdstate() & ifstream::badbit){
return PROCESSCONNECTIONDATAFILE_CANNOTOPEN;
}
// Process the file.
char *bufferRead = new char[256];
while (!fileStream.eof()){
fileStream.getline(bufferRead, 256);
receivedStringData.append(bufferRead);
receivedStringData.append("\n");
}
delete[] bufferRead;
bool newLine = false;
bool skipMode = false;
bool equalFound = false;
bool quoteMode = false;
bool serverNameFound = false;
bool serverUserFound = false;
bool serverPassFound = false;
bool serverSSLFound = false;
bool serverPortFound = false;
bool serverPrefixFound = false;
char bufferChar = 0;
int stringDataSize = receivedStringData.size();
int seekCount = 0;
string propertyName;
string propertyValue;
while (seekCount < stringDataSize){
if (receivedStringData[seekCount] == '='){
equalFound = true;
} else if (receivedStringData[seekCount] == '\n'){
// Newline reached. Check for what type of
// data it is.
// Chceck that the equals sign has been found,
// there is a values in the property name
// and property value before doing anything.
if (equalFound == true &&
propertyName.size() > 0 &&
propertyValue.size() > 0){
if (propertyName == "server" && serverNameFound == false){
// Setup the server hostname.
connData->hostname = propertyValue;
serverNameFound = true;
} else if (propertyName == "port" && serverPortFound == false){
// Setup the server port.
int portNum;
bool portNumValid = true;
try{
portNum = stoi(propertyValue);
}
catch(const invalid_argument &oor){
portNumValid = false;
}
// Port Number is valid so add to the
// CalDAVConnectionData handle.
if (portNumValid == true){
connData->port = portNum;
serverPortFound = true;
}
} else if (propertyName == "user" && serverUserFound == false){
// Setup the server user.
connData->username = propertyValue;
serverUserFound = true;
} else if (propertyName == "pass" && serverPassFound == false){
// Setup the server pass.
connData->password = propertyValue;
serverPassFound = true;
} else if (propertyName == "ssl" && serverSSLFound == false){
// Setup the server SSL status.
if (propertyValue == "true"){
connData->useSSL = true;
} else {
connData->useSSL = false;
}
serverSSLFound = true;
} else if (propertyName == "prefix" && serverPrefixFound == false){
// Setup the server prefix.
connData->prefix = propertyValue;
serverPrefixFound = true;
}
}
// Reset the variables.
equalFound = false;
propertyName.clear();
propertyValue.clear();
} else {
// No special character so add it to the
// Property name or value depending on
// if the equal sign has been found.
bufferChar = receivedStringData[seekCount];
if (equalFound == true){
propertyValue += bufferChar;
} else {
propertyName += bufferChar;
}
bufferChar = 0;
}
seekCount++;
}
// Check that the CalDAV connection data object
// contains valid data.
bool calDAVConnDataResult = CalDAVObjectValidSettings(connData);
if (calDAVConnDataResult == false){
processResult = PROCESSCONNECTIONDATAFILE_INVALID;
} else {
processResult = PROCESSCONNECTIONDATAFILE_OK;
}
return processResult;
}