// xestiacalendar_testcommon.cpp - Xestia Calendar Unit Test Common Functions.
//
// (c) 2016 Xestia Software Development.
//
// This file is part of Xestia Calendar.
//
// Xestia Address Book 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 Address Book 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;
}