diff --git a/1.5/Makefile b/1.5/Makefile new file mode 100644 index 0000000..78ac3cd --- /dev/null +++ b/1.5/Makefile @@ -0,0 +1,10 @@ +all: setporter tester + +setporter: portsetter.cpp + g++-5 -std=c++11 portsetter.cpp -o setport + +tester: tests.cpp + g++-5 -std=c++11 tests.cpp -o tests + +clean: + rm setport tests \ No newline at end of file diff --git a/1.5/install.sh b/1.5/install.sh new file mode 100755 index 0000000..097e258 --- /dev/null +++ b/1.5/install.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -a setport ] + then rm setport +fi + +if [ -a tests ] + then rm tests +fi + +sed -i '/alias setport=/d' ~/.bash_aliases +sed -i '/alias setporttest=/d' ~/.bash_aliases + +make + +echo "alias setport=\"$PWD/setport\"" >> ~/.bash_aliases +echo "alias setporttest=\"$PWD/tests\"" >> ~/.bash_aliases + +exec bash \ No newline at end of file diff --git a/1.5/lang/en/about.txt b/1.5/lang/en/about.txt new file mode 100644 index 0000000..1530d3b --- /dev/null +++ b/1.5/lang/en/about.txt @@ -0,0 +1,2 @@ +Author: Nick Pray ft. Eric Jorgensen +Class: CS 3370 diff --git a/1.5/lang/en/messages.txt b/1.5/lang/en/messages.txt new file mode 100644 index 0000000..54dceed --- /dev/null +++ b/1.5/lang/en/messages.txt @@ -0,0 +1,5 @@ +The flag provided was invalid. +Invalid amount of parameters was provided. +Invalid port number. +Uh oh... Something happend that I can't figure out. Sorry! +Listening on port \ No newline at end of file diff --git a/1.5/lang/en/tests/err_invalid_flag.txt b/1.5/lang/en/tests/err_invalid_flag.txt new file mode 100644 index 0000000..8501770 --- /dev/null +++ b/1.5/lang/en/tests/err_invalid_flag.txt @@ -0,0 +1,28 @@ +![ERROR]! - The flag provided was invalid. +CS-3370 Port Setter. +Usage: setport [FLAG]… [PORT]… +Examples: + setport -p 1234 #Sets port to listen to + setport --port 123 #Sets port to listen to + setport -h #Displays this screen + setport -? #Displays this screen + setport --help #Displays this screen + setport -! #Displays author/credits + setport --about #Displays author/credits + setport -v #Displays version + setport -e #Uses environment variable PORT for port + setport --environment #Uses environment variable PORT for port + setport -e SOME_PORT #Uses environment variable SOME_PORT for port + setport --environment SOME_PORT #Uses environment variable SOME_PORT for port + +Flags: + -p, --port Specify which port you want to listen to. + -h, -?, --help Displays this window. + -!, --about Displays author/credits information + -v, --version Displays application version + -e, --environment Uses environment variable as port number, + defaulting to PORT +Error Codes: + 1 Invalid Input Syntax + 2 Invalid Input + 3 Port out of range diff --git a/1.5/lang/en/tests/err_invalid_port.txt b/1.5/lang/en/tests/err_invalid_port.txt new file mode 100644 index 0000000..0745c0d --- /dev/null +++ b/1.5/lang/en/tests/err_invalid_port.txt @@ -0,0 +1,28 @@ +![ERROR]! - Invalid port number. +CS-3370 Port Setter. +Usage: setport [FLAG]… [PORT]… +Examples: + setport -p 1234 #Sets port to listen to + setport --port 123 #Sets port to listen to + setport -h #Displays this screen + setport -? #Displays this screen + setport --help #Displays this screen + setport -! #Displays author/credits + setport --about #Displays author/credits + setport -v #Displays version + setport -e #Uses environment variable PORT for port + setport --environment #Uses environment variable PORT for port + setport -e SOME_PORT #Uses environment variable SOME_PORT for port + setport --environment SOME_PORT #Uses environment variable SOME_PORT for port + +Flags: + -p, --port Specify which port you want to listen to. + -h, -?, --help Displays this window. + -!, --about Displays author/credits information + -v, --version Displays application version + -e, --environment Uses environment variable as port number, + defaulting to PORT +Error Codes: + 1 Invalid Input Syntax + 2 Invalid Input + 3 Port out of range diff --git a/1.5/lang/en/tests/err_param_count.txt b/1.5/lang/en/tests/err_param_count.txt new file mode 100644 index 0000000..f1f4969 --- /dev/null +++ b/1.5/lang/en/tests/err_param_count.txt @@ -0,0 +1,28 @@ +![ERROR]! - Invalid amount of parameters was provided. +CS-3370 Port Setter. +Usage: setport [FLAG]… [PORT]… +Examples: + setport -p 1234 #Sets port to listen to + setport --port 123 #Sets port to listen to + setport -h #Displays this screen + setport -? #Displays this screen + setport --help #Displays this screen + setport -! #Displays author/credits + setport --about #Displays author/credits + setport -v #Displays version + setport -e #Uses environment variable PORT for port + setport --environment #Uses environment variable PORT for port + setport -e SOME_PORT #Uses environment variable SOME_PORT for port + setport --environment SOME_PORT #Uses environment variable SOME_PORT for port + +Flags: + -p, --port Specify which port you want to listen to. + -h, -?, --help Displays this window. + -!, --about Displays author/credits information + -v, --version Displays application version + -e, --environment Uses environment variable as port number, + defaulting to PORT +Error Codes: + 1 Invalid Input Syntax + 2 Invalid Input + 3 Port out of range diff --git a/1.5/lang/en/tests/success.txt b/1.5/lang/en/tests/success.txt new file mode 100644 index 0000000..be014f5 --- /dev/null +++ b/1.5/lang/en/tests/success.txt @@ -0,0 +1 @@ +Listening on port 4040. diff --git a/1.5/lang/en/tests/success_env.txt b/1.5/lang/en/tests/success_env.txt new file mode 100644 index 0000000..4a38f4b --- /dev/null +++ b/1.5/lang/en/tests/success_env.txt @@ -0,0 +1 @@ +Listening on port 8080. diff --git a/1.5/lang/en/usage.txt b/1.5/lang/en/usage.txt new file mode 100644 index 0000000..99548ab --- /dev/null +++ b/1.5/lang/en/usage.txt @@ -0,0 +1,27 @@ +CS-3370 Port Setter. +Usage: setport [FLAG]… [PORT]… +Examples: + setport -p 1234 #Sets port to listen to + setport --port 123 #Sets port to listen to + setport -h #Displays this screen + setport -? #Displays this screen + setport --help #Displays this screen + setport -! #Displays author/credits + setport --about #Displays author/credits + setport -v #Displays version + setport -e #Uses environment variable PORT for port + setport --environment #Uses environment variable PORT for port + setport -e SOME_PORT #Uses environment variable SOME_PORT for port + setport --environment SOME_PORT #Uses environment variable SOME_PORT for port + +Flags: + -p, --port Specify which port you want to listen to. + -h, -?, --help Displays this window. + -!, --about Displays author/credits information + -v, --version Displays application version + -e, --environment Uses environment variable as port number, + defaulting to PORT +Error Codes: + 1 Invalid Input Syntax + 2 Invalid Input + 3 Port out of range diff --git a/1.5/lang/en/version.txt b/1.5/lang/en/version.txt new file mode 100644 index 0000000..3c2cdf2 --- /dev/null +++ b/1.5/lang/en/version.txt @@ -0,0 +1 @@ +Version: 1.5 diff --git a/1.5/lang/es/about.txt b/1.5/lang/es/about.txt new file mode 100644 index 0000000..49b6edd --- /dev/null +++ b/1.5/lang/es/about.txt @@ -0,0 +1,2 @@ +Autor: Nick Pray con Eric Jorgensen +Clase: CS 3370 diff --git a/1.5/lang/es/messages.txt b/1.5/lang/es/messages.txt new file mode 100644 index 0000000..ca732d0 --- /dev/null +++ b/1.5/lang/es/messages.txt @@ -0,0 +1,5 @@ +La bandera no era válida. +Se proporcionó cantidad de parámetros no válido. +Número de puerto válido. +Uh oh ... Algo sucedió que no puedo entender. ¡Lo siento! +Escucha en el puerto \ No newline at end of file diff --git a/1.5/lang/es/tests/err_invalid_flag.txt b/1.5/lang/es/tests/err_invalid_flag.txt new file mode 100644 index 0000000..ce070e8 --- /dev/null +++ b/1.5/lang/es/tests/err_invalid_flag.txt @@ -0,0 +1,28 @@ +![ERROR]! - La bandera no era válida. +CS-3370 Port Setter. +Uso: setport [FLAG]… [PORT]… +Ejemplos: + setport -p 1234 #Establece el puerto a escuchar + setport --port 123 #Establece el puerto a escuchar + setport -h #Muestra esta pantalla + setport -? #Muestra esta pantalla + setport --help #Muestra esta pantalla + setport -! #Muestra autor/créditos + setport --about #Muestra autor/créditos + setport -v #Muestra versión + setport -e #Utiliza el puerto variable de entorno para el puerto + setport --environment #Utiliza el puerto variable de entorno para el puerto + setport -e SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + setport --environment SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + +Banderas: + -p, --port Especifique el puerto que desea escuchar. + -h, -?, --help Muestra esta ventana. + -!, --about Muestra autor / información de créditos + -v, --version Muestra la versión de la aplicación + -e, --environment Utiliza variable de entorno como número de puerto, + por defecto PORT +Códigos de error: + 1 De entrada no válido Sintaxis + 2 Entrada inválida + 3 Puerto fuera de rango diff --git a/1.5/lang/es/tests/err_invalid_port.txt b/1.5/lang/es/tests/err_invalid_port.txt new file mode 100644 index 0000000..0b8f945 --- /dev/null +++ b/1.5/lang/es/tests/err_invalid_port.txt @@ -0,0 +1,28 @@ +![ERROR]! - Número de puerto válido. +CS-3370 Port Setter. +Uso: setport [FLAG]… [PORT]… +Ejemplos: + setport -p 1234 #Establece el puerto a escuchar + setport --port 123 #Establece el puerto a escuchar + setport -h #Muestra esta pantalla + setport -? #Muestra esta pantalla + setport --help #Muestra esta pantalla + setport -! #Muestra autor/créditos + setport --about #Muestra autor/créditos + setport -v #Muestra versión + setport -e #Utiliza el puerto variable de entorno para el puerto + setport --environment #Utiliza el puerto variable de entorno para el puerto + setport -e SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + setport --environment SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + +Banderas: + -p, --port Especifique el puerto que desea escuchar. + -h, -?, --help Muestra esta ventana. + -!, --about Muestra autor / información de créditos + -v, --version Muestra la versión de la aplicación + -e, --environment Utiliza variable de entorno como número de puerto, + por defecto PORT +Códigos de error: + 1 De entrada no válido Sintaxis + 2 Entrada inválida + 3 Puerto fuera de rango diff --git a/1.5/lang/es/tests/err_param_count.txt b/1.5/lang/es/tests/err_param_count.txt new file mode 100644 index 0000000..0d7bf4b --- /dev/null +++ b/1.5/lang/es/tests/err_param_count.txt @@ -0,0 +1,28 @@ +![ERROR]! - Se proporcionó cantidad de parámetros no válido. +CS-3370 Port Setter. +Uso: setport [FLAG]… [PORT]… +Ejemplos: + setport -p 1234 #Establece el puerto a escuchar + setport --port 123 #Establece el puerto a escuchar + setport -h #Muestra esta pantalla + setport -? #Muestra esta pantalla + setport --help #Muestra esta pantalla + setport -! #Muestra autor/créditos + setport --about #Muestra autor/créditos + setport -v #Muestra versión + setport -e #Utiliza el puerto variable de entorno para el puerto + setport --environment #Utiliza el puerto variable de entorno para el puerto + setport -e SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + setport --environment SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + +Banderas: + -p, --port Especifique el puerto que desea escuchar. + -h, -?, --help Muestra esta ventana. + -!, --about Muestra autor / información de créditos + -v, --version Muestra la versión de la aplicación + -e, --environment Utiliza variable de entorno como número de puerto, + por defecto PORT +Códigos de error: + 1 De entrada no válido Sintaxis + 2 Entrada inválida + 3 Puerto fuera de rango diff --git a/1.5/lang/es/tests/success.txt b/1.5/lang/es/tests/success.txt new file mode 100644 index 0000000..bdac981 --- /dev/null +++ b/1.5/lang/es/tests/success.txt @@ -0,0 +1 @@ +Escucha en el puerto 4040. diff --git a/1.5/lang/es/tests/success_env.txt b/1.5/lang/es/tests/success_env.txt new file mode 100644 index 0000000..42be054 --- /dev/null +++ b/1.5/lang/es/tests/success_env.txt @@ -0,0 +1 @@ +Escucha en el puerto 8080. diff --git a/1.5/lang/es/usage.txt b/1.5/lang/es/usage.txt new file mode 100644 index 0000000..7674ee8 --- /dev/null +++ b/1.5/lang/es/usage.txt @@ -0,0 +1,27 @@ +CS-3370 Port Setter. +Uso: setport [FLAG]… [PORT]… +Ejemplos: + setport -p 1234 #Establece el puerto a escuchar + setport --port 123 #Establece el puerto a escuchar + setport -h #Muestra esta pantalla + setport -? #Muestra esta pantalla + setport --help #Muestra esta pantalla + setport -! #Muestra autor/créditos + setport --about #Muestra autor/créditos + setport -v #Muestra versión + setport -e #Utiliza el puerto variable de entorno para el puerto + setport --environment #Utiliza el puerto variable de entorno para el puerto + setport -e SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + setport --environment SOME_PORT #Utiliza SOME_PORT variable de entorno para el puerto + +Banderas: + -p, --port Especifique el puerto que desea escuchar. + -h, -?, --help Muestra esta ventana. + -!, --about Muestra autor / información de créditos + -v, --version Muestra la versión de la aplicación + -e, --environment Utiliza variable de entorno como número de puerto, + por defecto PORT +Códigos de error: + 1 De entrada no válido Sintaxis + 2 Entrada inválida + 3 Puerto fuera de rango diff --git a/1.5/lang/es/version.txt b/1.5/lang/es/version.txt new file mode 100644 index 0000000..4b72621 --- /dev/null +++ b/1.5/lang/es/version.txt @@ -0,0 +1 @@ +Versión: 1.5 diff --git a/1.5/portsetter.cpp b/1.5/portsetter.cpp new file mode 100644 index 0000000..aa32214 --- /dev/null +++ b/1.5/portsetter.cpp @@ -0,0 +1,318 @@ +/* + Command Line Arguments and Gathering Requirements + Nick Pray + CS-3370 + co5 by epj +*/ +#include +#include +#include +#include +#include + +using namespace std; + +const int INDEX_FLAG = 1; +const int INDEX_PORT = 2; + +const int MAX_PORT = 65535; +const int MIN_PORT = 1; + +const string FLAG_PORT = "--port"; +const string FLAG_PORT_SHORT = "-p"; + +const string FLAG_HELP = "--help"; +const string FLAG_HELP_SHORT = "-h"; +const string FLAG_HELP_SHORT_2 = "-?"; + +const string FLAG_ABOUT = "--about"; +const string FLAG_ABOUT_SHORT = "-!"; + +const string FLAG_VERSION = "--version"; +const string FLAG_VERSION_SHORT = "-v"; + +const string FLAG_ENVIRONMENT= "--environment"; //co5 epj change added --env +const string FLAG_ENVIRONMENT_SHORT= "-e"; //co5 epj change renamed -e to _short + +const string ERROR_PREFIX = "![ERROR]! - "; + +const string FILE_USAGE = "usage"; +const string FILE_ABOUT = "about"; +const string FILE_VERSION = "version"; + +const string DEFAULT_ENVIRONMENT_VAR = "PORT"; + +enum Flag { + Port, + Usage, + About, + Version, + Environment +}; + +enum Message { + MsgFlagInvalid, + MsgInvalidPort, + MsgParamCount, + MsgUnknown, + MsgListening +}; + +map consoleMessages; + +//Function references +Flag ParseFlag(int, char**); +void CollectMessages(); +void PrintError(Message); +void PrintFile(string); +string GetLang(); + +string lang; + +int main(int argc, char* argv[]){ + + Flag flag; + + lang = GetLang(); + + if(lang == ""){ + cout << "No valid language defined, using English." << endl; //co5 epj this text needs to be the same as in tests.cpp + lang = "en"; + } + + //Load the error messages map + CollectMessages(); + + //Parse the flag + try{ + flag = ParseFlag(argc, argv); + } catch (Message e){ + PrintError(e); + return 1; + } + + //Usage + if(flag == Usage) + { + PrintFile(FILE_USAGE); + return 0; + } + + //About + if(flag == About){ + PrintFile(FILE_ABOUT); + return 0; + } + + //Version + if(flag == Version){ + PrintFile(FILE_VERSION); + return 0; + } + + int port; + char* temp; + string envVar; + + //Environment + if(flag == Environment){ + + temp = argc > INDEX_FLAG + 1 ? getenv(argv[INDEX_PORT]) : getenv(DEFAULT_ENVIRONMENT_VAR.c_str()); + + if(temp!= nullptr) envVar = temp; + else { + PrintError(MsgInvalidPort); + return 1; + } + + try{ + port = stoi(envVar); + } + catch(exception e){ + PrintError(MsgInvalidPort); + return 1; + } + } + + //Port + else if(flag == Port){ + + string rawPort = argv[INDEX_PORT]; + size_t conversionLength; + + //Handles case where port number starts with chars + try{ + port = stoi(rawPort, &conversionLength); + } catch (exception e){ + PrintError(MsgInvalidPort); + return 1; + } + + //Handles case where port number starts with valid int but ends in chars + if((rawPort.substr(0,conversionLength).size() != rawPort.size()) || (port < MIN_PORT || port > MAX_PORT)) + { + PrintError(MsgInvalidPort); + return 1; + } + } + + //I have no idea how you got this without a port but this will catch it + else{ + PrintError(MsgUnknown); + return 1; + } + + cout << consoleMessages[MsgListening] + " " << port << "." << endl; + return 0; +} + +//Parses the flag into its enumeration, will throw type Error if failed parse or invalid formatting +Flag ParseFlag(int argc, char* argv[]){ + + if(argc < INDEX_FLAG + 1) return Usage; + + string flag = argv[INDEX_FLAG]; + + //Port + if(flag == FLAG_PORT || flag == FLAG_PORT_SHORT){ + if(argc < INDEX_PORT + 1 || argc > INDEX_PORT + 1) throw MsgParamCount; + return Port; + }; + + //Environment + if(flag == FLAG_ENVIRONMENT || flag == FLAG_ENVIRONMENT_SHORT){ //co5 epj change added _short + return Environment; + }; + + //Usage + if(flag == FLAG_HELP || flag == FLAG_HELP_SHORT || flag == FLAG_HELP_SHORT_2){ + if(argc >= INDEX_PORT + 1) throw MsgParamCount; + return Usage; + }; + + //About + if(flag == FLAG_ABOUT || flag == FLAG_ABOUT_SHORT){ + if(argc >= INDEX_PORT + 1) throw MsgParamCount; + return About; + }; + + //Version + if(flag == FLAG_VERSION || flag == FLAG_VERSION_SHORT){ + if(argc >= INDEX_PORT + 1) throw MsgParamCount; + return Version; + }; + + //Else + throw MsgFlagInvalid; +} + +//Collect all the error messages +void CollectMessages(){ + + consoleMessages.clear(); + + ifstream reader("lang/" + lang + "/messages.txt"); + + if(!reader.good()){ + cout << "Missing " + lang + " translation file for error messages. Using English." << endl; + reader.close(); + reader.open("lang/en/messages.txt"); + } + + string temp; + + getline(reader, temp); + consoleMessages[MsgFlagInvalid] = temp; + + getline(reader, temp); + consoleMessages[MsgParamCount] = temp; + + getline(reader, temp); + consoleMessages[MsgInvalidPort] = temp; + + getline(reader, temp); + consoleMessages[MsgUnknown] = temp; + + getline(reader, temp); + consoleMessages[MsgListening] = temp; + + reader.close(); +} + +//Prints an error prepended by error enum +void PrintError(Message m){ + if(consoleMessages.find(m) != consoleMessages.end()) cout << ERROR_PREFIX << consoleMessages.find(m)->second << endl; + PrintFile(FILE_USAGE); +} + +//Prints any of the info files with just the type name +void PrintFile(string kind){ + + ifstream reader("lang/" + lang + "/" + kind + ".txt"); + + if(!reader.good()){ + cout << "Missing " + lang + " translation file for '" + kind + ".txt'. Using English." << endl; + reader.close(); + reader.open("lang/en/" + kind + ".txt"); + } + + string temp; + getline(reader, temp); + while(!reader.eof()) + { + cout << temp << endl; + getline(reader, temp); + } + + cout << temp; + + reader.close(); +} + +string GetLang(){ + + string input = "en_US"; + regex pattern("^(.{2})(?:_[A-Z]{2}(?:\\.UTF-8)?|\\.UTF-8)?$"); + smatch matches; + + //Define all environment variables to search in order + string envs[]{"LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG"}; + + int size = sizeof(envs) / sizeof(string); + char* temp; + string lang; + + for(int i = 0; i < size; i++){ + + //Get environment variable + temp = getenv(envs[i].c_str()); + + //Couldn't find the environment variable + if(temp == nullptr) continue; + + //Convert to string for comparison and regex + lang = temp; + + //Environment variable set to default + if(lang == " " || lang == "C" || lang == "C.UTF-8") continue; + + //Find matches + regex_match(lang, matches, pattern); + + //If there is a match return it else continue to next environment variable + if(matches.size() > 0) return matches[1]; + else continue; + + } + + return ""; +} + +//graveyard / notes by epj: + +//i *think* you were supposed to say -p to tell it to set the port and then + // -e to tell it to look at the evironment. + //like: setport -p -e THE_ENV_PORT + //which makes the logic a bit more difficult. + //if you look at the co5 requirements you will see what is meant. + //but, I just added --environment for now, not changing the logic. \ No newline at end of file diff --git a/1.5/tests.cpp b/1.5/tests.cpp new file mode 100644 index 0000000..64fd35b --- /dev/null +++ b/1.5/tests.cpp @@ -0,0 +1,160 @@ +/* + Test Script For PortSetter + Nick Pray + CS-3370 + co5 by epj +*/ +#include +#include +#include + +using namespace std; + +int FormatCode(int); +void RunTest(string, string, int); +string GetLang(); + +const int CODE_FORMATTER = 256; +int CODE_SUCCESS = 0; +const int CODE_FAIL = 1; + +const string TEMP_FILE_NAME = "__temp"; +const string BOOL_FILE_NAME = "__boolCheck"; //co5 epj added (if no lang, add the no lang string, shown below.) + +string lang, path; +string badLangString = "No valid language defined, using English."; //co5 epj this text needs to be the same as in setport.cpp +bool badLangBool = false; //co5 epj added to check for no lang. + +int main(int argc, char* argv[]){ + + lang = GetLang(); + + if(lang == ""){ + cout << badLangString << endl; + lang = "en"; + badLangBool = true; + } + + //Get this files path + path = argv[0]; + path = path.substr(0, path.find_last_of("\\/")); + + RunTest("./setport", "usage.txt", CODE_SUCCESS); + RunTest("./setport -h", "usage.txt", CODE_SUCCESS); + RunTest("./setport --help", "usage.txt", CODE_SUCCESS); + RunTest("./setport -?", "usage.txt", CODE_SUCCESS); + RunTest("./setport -!", "about.txt", CODE_SUCCESS); + RunTest("./setport --about", "about.txt", CODE_SUCCESS); + RunTest("./setport -v", "version.txt", CODE_SUCCESS); + RunTest("./setport --version", "version.txt", CODE_SUCCESS); + RunTest("./setport -e", "tests/success_env.txt", CODE_SUCCESS); + RunTest("./setport --environment", "tests/success_env.txt", CODE_SUCCESS); //co5 epj added + RunTest("./setport -p 4040", "tests/success.txt", CODE_SUCCESS); + RunTest("./setport --port 4040", "tests/success.txt", CODE_SUCCESS); + RunTest("./setport help", "tests/err_invalid_flag.txt", CODE_FAIL); + RunTest("./setport -help", "tests/err_invalid_flag.txt", CODE_FAIL); + RunTest("./setport --h", "tests/err_invalid_flag.txt", CODE_FAIL); + RunTest("./setport -h --help", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport -hs", "tests/err_invalid_flag.txt", CODE_FAIL); + RunTest("./setport -p --port 9", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport -p 77 33", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport -p -21", "tests/err_invalid_port.txt", CODE_FAIL); + RunTest("./setport -p 0", "tests/err_invalid_port.txt", CODE_FAIL); + RunTest("./setport --port", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport -p 90642", "tests/err_invalid_port.txt", CODE_FAIL); + RunTest("./setport -x 45321", "tests/err_invalid_flag.txt", CODE_FAIL); + RunTest("./setport -P 714", "tests/err_invalid_flag.txt", CODE_FAIL); + RunTest("./setport -? 444", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport -! 444", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport --about 444", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport -v 444", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport --version 444", "tests/err_param_count.txt", CODE_FAIL); + RunTest("./setport -e 444", "tests/err_invalid_port.txt", CODE_FAIL); + RunTest("./setport --environment 445", "tests/err_invalid_port.txt", CODE_FAIL); //co5 epj added + + + //Remove the temporary file + //system(("rm " + path + "/" + TEMP_FILE_NAME).c_str()); + + system("rm __temp __boolCheck"); //co5 epj added to remove temp files. + +} + +void RunTest(string command, string check, int checkCode){ + + string temp; + string fileNameToCheck = path + "/lang/" + lang + "/" + check; + + //Setport + int statusCode = system((command + " > " + path + "/" + TEMP_FILE_NAME).c_str()) / 256; + cout << command + " code : " << ((statusCode == checkCode) ? "Success" : "Fail") << endl; //co5 epj changed spaces for readability + + ifstream reader(fileNameToCheck); + ofstream checkFileWithBool(BOOL_FILE_NAME); + + if(!reader.good()){ + cout << "Missing " + lang + " translation test for '" + lang + "/" + check + "'." << endl; + } + else{ + + //co5 epj added so no lang error is fixed + if (badLangBool){ + checkFileWithBool << badLangString << endl; + } + string catString = "cat " + fileNameToCheck + " >> " + BOOL_FILE_NAME; + system(catString.c_str()); + + statusCode = system(("diff " + path + "/" + TEMP_FILE_NAME + " " + BOOL_FILE_NAME + " > /dev/null").c_str()) / 256; //co5 epj changed for readability + cout << command + " output: " << ((statusCode == CODE_SUCCESS) ? "Success" : "Fail") << endl; + } + + reader.close(); + checkFileWithBool.close(); +} + +string GetLang(){ + + string input = "en_US"; + regex pattern("^(.{2})(?:_[A-Z]{2}(?:\\.UTF-8)?|\\.UTF-8)?$"); + smatch matches; + + //Define all environment variables to search in order + string envs[]{"LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG"}; + + int size = sizeof(envs) / sizeof(string); + char* temp; + string lang; + + for(int i = 0; i < size; i++){ + + //Get environment variable + temp = getenv(envs[i].c_str()); + + //Couldn't find the environment variable + if(temp == nullptr) continue; + + //Convert to string for comparison and regex + lang = temp; + + //Environment variable set to default + if(lang == " " || lang == "C" || lang == "C.UTF-8") continue; + + //Find matches + regex_match(lang, matches, pattern); + + //If there is a match return it else continue to next environment variable + if(matches.size() > 0) return matches[1]; + else continue; + + } + + return ""; +} + +//graveyard / notes by epj: + +//these tests RELY on the fact that there is a lang set. +//if not, it adds in the "defaulting to english" line. and tests fail. +//FIXED! you're welcome. + +//the env tests also RELY on 8080 as the PORT value in env. \ No newline at end of file diff --git a/1.5/uninstall.sh b/1.5/uninstall.sh new file mode 100755 index 0000000..2f61498 --- /dev/null +++ b/1.5/uninstall.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +if [ -a setport ] + then rm setport +fi + +if [ -a tests ] + then rm tests +fi + +sed -i '/alias setport=/d' ~/.bash_aliases +sed -i '/alias setporttest=/d' ~/.bash_aliases + +exec bash \ No newline at end of file diff --git a/readme.md b/readme.md index bee9941..a0c08de 100644 --- a/readme.md +++ b/readme.md @@ -6,13 +6,14 @@ * 1.1 - Change Order 1 * 1.2 - Change Order 2 * 1.3 - Change Order 3 +* 1.5 - Change Order 5 ## Installation For installation, run `./install.sh` in the terminal from within the latest versions directory. -As of this documents last update it will be 1.3 +As of this documents last update it will be 1.5 If you get the response, `bash: ./install.sh: Permission denied` @@ -37,7 +38,7 @@ in the terminal after installation To uninstall the program and its aliases, run `./uninstall.sh` from the terminal from the same directory you ran the install script from -As of this document, the latest version is 1.3 +As of this document, the latest version is 1.5 If you get the response `./uninstall.sh`