From 209c36e7fdecc42dcb9685bc9d9ed5e99aa1f9a7 Mon Sep 17 00:00:00 2001 From: klmp200 Date: Tue, 16 May 2017 00:08:07 +0200 Subject: [PATCH 1/2] =?UTF-8?q?D=C3=A9but=20de=20l'int=C3=A9gration=20des?= =?UTF-8?q?=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 4 +-- CMakeLists.txt | 53 +++++++++++++++++++++++++++--- fish_shell/CMakeLists.txt | 8 +++++ fish_shell/fish_commands.c | 6 ++-- fish_shell/fish_core.c | 6 ++-- fish_shell/fish_utils.c | 32 +++++++++--------- main.c => fish_shell/main.c | 4 +-- fish_shell_tests/CMakeLists.txt | 20 +++++++++++ fish_shell_tests/FishCoreTests.cpp | 38 +++++++++++++++++++++ fish_shell_tests/FishCoreTests.h | 15 +++++++++ fish_shell_tests/main.cpp | 16 +++++++++ 11 files changed, 171 insertions(+), 31 deletions(-) create mode 100644 fish_shell/CMakeLists.txt rename main.c => fish_shell/main.c (68%) create mode 100644 fish_shell_tests/CMakeLists.txt create mode 100644 fish_shell_tests/FishCoreTests.cpp create mode 100644 fish_shell_tests/FishCoreTests.h create mode 100644 fish_shell_tests/main.cpp diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3bdd78f..a255168 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,9 +9,9 @@ build: # instead of calling g++ directly you can also use some build toolkit like make # install the necessary build tools when needed before_script: - - apt update && apt -y install make autoconf cmake + - apt update && apt -y install make cmake python script: - - mkdir build && cd build && cmake .. && make + - mkdir build && cd build && cmake .. && make && make test #artifacts: # paths: # - mybinary diff --git a/CMakeLists.txt b/CMakeLists.txt index 99595cf..0dd57f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,52 @@ cmake_minimum_required(VERSION 3.7) -project(fish) +project(fish_shell) -set(CMAKE_C_STANDARD 99) -set(CMAKE_C_FLAGS "-Wall -Werror -pedantic -fpic -Wextra") +# We need thread support +find_package(Threads REQUIRED) -set(SOURCE_FILES main.c fish_shell/fish_core.c fish_shell/fish_core.h fish_shell/fish_commands.c fish_shell/fish_commands.h fish_shell/fish_types.h fish_shell/fish_utils.c fish_shell/fish_utils.h fish_shell/fish_globbing.c fish_shell/fish_globbing.h) -add_executable(fish ${SOURCE_FILES}) +# Enable ExternalProject CMake module +include(ExternalProject) +# Download and install GoogleTest +ExternalProject_Add( + gtest + URL https://github.com/google/googletest/archive/master.zip + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/gtest + # Disable install step + INSTALL_COMMAND "" +) + +# Get GTest source and binary directories from CMake project +ExternalProject_Get_Property(gtest source_dir binary_dir) + +# Create a libgtest target to be used as a dependency by test programs +add_library(libgtest IMPORTED STATIC GLOBAL) +add_dependencies(libgtest gtest) + +# Set libgtest properties +set_target_properties(libgtest PROPERTIES + "IMPORTED_LOCATION" "${binary_dir}/googlemock/gtest/libgtest.a" + "IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}" + ) + +# Create a libgmock target to be used as a dependency by test programs +add_library(libgmock IMPORTED STATIC GLOBAL) +add_dependencies(libgmock gtest) + +# Set libgmock properties +set_target_properties(libgmock PROPERTIES + "IMPORTED_LOCATION" "${binary_dir}/googlemock/libgmock.a" + "IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}" + ) + +include_directories( + "${source_dir}/googletest/include" + "${source_dir}/googlemock/include" +) + +add_subdirectory(fish_shell) +add_subdirectory(fish_shell_tests) + +enable_testing() + +add_test(fish_tests fish_shell_tests/fish_tests) diff --git a/fish_shell/CMakeLists.txt b/fish_shell/CMakeLists.txt new file mode 100644 index 0000000..aace618 --- /dev/null +++ b/fish_shell/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.7) +project(fish_shell) + +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_FLAGS "-Wall -Werror -pedantic -fpic -Wextra -Wshadow") + +set(SOURCE_FILES main.c fish_core.c fish_core.h fish_commands.c fish_commands.h fish_types.h fish_utils.c fish_utils.h fish_globbing.c fish_globbing.h) +add_executable(fish ${SOURCE_FILES}) diff --git a/fish_shell/fish_commands.c b/fish_shell/fish_commands.c index 96dc9b8..a103451 100644 --- a/fish_shell/fish_commands.c +++ b/fish_shell/fish_commands.c @@ -7,9 +7,9 @@ /* Necessary global variables */ char * builtinCommandsStr[] = { - "cd", - "help", - "exit" + (char *) "cd", + (char *) "help", + (char *) "exit" }; diff --git a/fish_shell/fish_core.c b/fish_shell/fish_core.c index 43e4d18..8eb5213 100644 --- a/fish_shell/fish_core.c +++ b/fish_shell/fish_core.c @@ -23,7 +23,7 @@ void fishLoop(Settings * settings){ printf("%s", settings->PS1); line = fishReadLine(); - splited = split(line, FISH_TOKENS); + splited = split(line, (char*) FISH_TOKENS); splited = fishExpand(splited); array = wordListToWordArray(splited); @@ -72,7 +72,7 @@ WordList * split(char *string, char *separator){ char *fishReadLine() { size_t bufferSize = FISH_BUFFER_SIZE; int position = 0; - char *line = malloc(sizeof(char*) * bufferSize); + char *line = (char*) malloc(sizeof(char*) * bufferSize); int c; if (line == NULL){ @@ -96,7 +96,7 @@ char *fishReadLine() { if ((size_t) position > bufferSize){ bufferSize+=bufferSize; - line = realloc(line, bufferSize); + line = (char*) realloc(line, bufferSize); if (line == NULL){ crash(); } diff --git a/fish_shell/fish_utils.c b/fish_shell/fish_utils.c index a018a8f..7132ec2 100644 --- a/fish_shell/fish_utils.c +++ b/fish_shell/fish_utils.c @@ -10,10 +10,10 @@ void crash(){ char *crashErrors[] = { - "fish: Fucking malloc always returning NULL pointer !", - "fish: Error allocating fucking pointer !", - "fish: C language exploding again", - "fish: It's not you're fault for this time" + (char *) "fish: Fucking malloc always returning NULL pointer !", + (char *) "fish: Error allocating fucking pointer !", + (char *) "fish: C language exploding again", + (char *) "fish: It's not you're fault for this time" }; int picked = 0; @@ -28,9 +28,9 @@ char *getInsult(){ static int init = 0; int picked = 0; char *insults[] = { - "Apprend à écrire crétin !", - "Bolos !", - "Mois aussi je sais écrire de la merde, pourtant je le fait pas !" + (char *) "Apprend à écrire crétin !", + (char *) "Bolos !", + (char *) "Mois aussi je sais écrire de la merde, pourtant je le fait pas !" }; if (!init){ srand((unsigned int) time(NULL)); @@ -67,19 +67,19 @@ WordList *createWordList() { } void addWordList(WordList *list, char *word) { - WordListElement *new = (WordListElement*) malloc(sizeof(WordListElement)); - if (new == NULL) crash(); + WordListElement *newElement = (WordListElement*) malloc(sizeof(WordListElement)); + if (newElement == NULL) crash(); else { - new->next = NULL; - new->previous = list->last; + newElement->next = NULL; + newElement->previous = list->last; if (list->size == 0){ - list->first = new; - list->last = new; + list->first = newElement; + list->last = newElement; } else { - list->last->next = new; - list->last = new; + list->last->next = newElement; + list->last = newElement; } - new->word = strdup(word); + newElement->word = strdup(word); list->size++; } } diff --git a/main.c b/fish_shell/main.c similarity index 68% rename from main.c rename to fish_shell/main.c index 8c76cae..2738a9b 100644 --- a/main.c +++ b/fish_shell/main.c @@ -1,6 +1,6 @@ #include -#include "fish_shell/fish_core.h" -#include "fish_shell/fish_types.h" +#include "fish_core.h" +#include "fish_types.h" int main() { /* todo load config file */ diff --git a/fish_shell_tests/CMakeLists.txt b/fish_shell_tests/CMakeLists.txt new file mode 100644 index 0000000..8a4f8df --- /dev/null +++ b/fish_shell_tests/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.7) +project(fish_shell_tests) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -c") + +include_directories( + "${source_dir}/googletest/include" + "${source_dir}/googlemock/include" +) + +set(SOURCE_FILES_TESTS main.cpp FishCoreTests.cpp FishCoreTests.h) + +add_executable(fish_tests ${SOURCE_FILES_TESTS}) + +target_link_libraries(fish_tests libgtest libgmock) + + diff --git a/fish_shell_tests/FishCoreTests.cpp b/fish_shell_tests/FishCoreTests.cpp new file mode 100644 index 0000000..030cf05 --- /dev/null +++ b/fish_shell_tests/FishCoreTests.cpp @@ -0,0 +1,38 @@ +// +// Created by Antoine Bartuccio on 15/05/2017. +// + +#include "FishCoreTests.h" + +// +// Created by Antoine Bartuccio on 15/05/2017. +// + +#include "../fish_shell/fish_core.c" + + +//TEST_F(FishCoreTests, split){ +// ASSERT_TRUE(true); +//} + +TEST(simple_split, split){ + char input[] = "git push --force"; + char *output[] = { + (char *) "git", + (char *) "push", + (char *) "--force" + }; + WordList *list = split(input, (char *) FISH_TOKENS); + WordListElement *current = list->first; + int i = 0; + + ASSERT_FALSE(current == NULL); + while(current != NULL){ + ASSERT_STREQ(current->word, output[i]); + current = current->next; + i++; + } + + freeWordList(list); + +} diff --git a/fish_shell_tests/FishCoreTests.h b/fish_shell_tests/FishCoreTests.h new file mode 100644 index 0000000..45ce012 --- /dev/null +++ b/fish_shell_tests/FishCoreTests.h @@ -0,0 +1,15 @@ +// +// Created by Antoine Bartuccio on 15/05/2017. +// + +#ifndef FISH_FISH_CORE_TESTS_H +#define FISH_FISH_CORE_TESTS_H + +#include + +class FishCoreTests : public ::testing::Test { + void SetUp() {} + void TearDown(){} +}; + +#endif //FISH_FISH_CORE_TESTS_H diff --git a/fish_shell_tests/main.cpp b/fish_shell_tests/main.cpp new file mode 100644 index 0000000..95f52c9 --- /dev/null +++ b/fish_shell_tests/main.cpp @@ -0,0 +1,16 @@ +// +// Created by Antoine Bartuccio on 15/05/2017. +// + + + +#include + +int main(int argc, char **argv){ + + printf("Je mange des patates"); + ::testing::InitGoogleTest(&argc, argv); + int ret = RUN_ALL_TESTS(); + + return ret; +} From e9e19fbf61b2d2cb4efc2a1e6551b629094d7087 Mon Sep 17 00:00:00 2001 From: klmp200 Date: Tue, 16 May 2017 01:33:36 +0200 Subject: [PATCH 2/2] Premier test fonctionnel --- CMakeLists.txt | 9 ++++++++- fish_shell/CMakeLists.txt | 4 ++-- fish_shell_tests/CMakeLists.txt | 5 ++--- fish_shell_tests/FishCoreTests.cpp | 10 ++++------ fish_shell_tests/main.cpp | 10 ++-------- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dd57f8..3c1eb5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,9 +44,16 @@ include_directories( "${source_dir}/googlemock/include" ) +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_FLAGS "-Wall -Werror -pedantic -fpic -Wextra -Wshadow") + add_subdirectory(fish_shell) + add_subdirectory(fish_shell_tests) + enable_testing() -add_test(fish_tests fish_shell_tests/fish_tests) +add_test(NAME fish_tests + COMMAND fish_tests +) diff --git a/fish_shell/CMakeLists.txt b/fish_shell/CMakeLists.txt index aace618..272f384 100644 --- a/fish_shell/CMakeLists.txt +++ b/fish_shell/CMakeLists.txt @@ -4,5 +4,5 @@ project(fish_shell) set(CMAKE_C_STANDARD 99) set(CMAKE_C_FLAGS "-Wall -Werror -pedantic -fpic -Wextra -Wshadow") -set(SOURCE_FILES main.c fish_core.c fish_core.h fish_commands.c fish_commands.h fish_types.h fish_utils.c fish_utils.h fish_globbing.c fish_globbing.h) -add_executable(fish ${SOURCE_FILES}) +file(GLOB SOURCE_FILES *) +add_executable(fish ${SOURCE_FILES}) \ No newline at end of file diff --git a/fish_shell_tests/CMakeLists.txt b/fish_shell_tests/CMakeLists.txt index 8a4f8df..72e4047 100644 --- a/fish_shell_tests/CMakeLists.txt +++ b/fish_shell_tests/CMakeLists.txt @@ -4,17 +4,16 @@ project(fish_shell_tests) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -c") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") include_directories( "${source_dir}/googletest/include" "${source_dir}/googlemock/include" ) -set(SOURCE_FILES_TESTS main.cpp FishCoreTests.cpp FishCoreTests.h) +file(GLOB SOURCE_FILES_TESTS *) add_executable(fish_tests ${SOURCE_FILES_TESTS}) target_link_libraries(fish_tests libgtest libgmock) - diff --git a/fish_shell_tests/FishCoreTests.cpp b/fish_shell_tests/FishCoreTests.cpp index 030cf05..4ef96b8 100644 --- a/fish_shell_tests/FishCoreTests.cpp +++ b/fish_shell_tests/FishCoreTests.cpp @@ -3,19 +3,17 @@ // #include "FishCoreTests.h" - -// -// Created by Antoine Bartuccio on 15/05/2017. -// - #include "../fish_shell/fish_core.c" +#include "../fish_shell/fish_utils.c" +#include "../fish_shell/fish_commands.c" +#include "../fish_shell/fish_globbing.c" //TEST_F(FishCoreTests, split){ // ASSERT_TRUE(true); //} -TEST(simple_split, split){ +TEST(command_split, split){ char input[] = "git push --force"; char *output[] = { (char *) "git", diff --git a/fish_shell_tests/main.cpp b/fish_shell_tests/main.cpp index 95f52c9..c2657e9 100644 --- a/fish_shell_tests/main.cpp +++ b/fish_shell_tests/main.cpp @@ -2,15 +2,9 @@ // Created by Antoine Bartuccio on 15/05/2017. // - - -#include +#include "gtest/gtest.h" int main(int argc, char **argv){ - - printf("Je mange des patates"); ::testing::InitGoogleTest(&argc, argv); - int ret = RUN_ALL_TESTS(); - - return ret; + return RUN_ALL_TESTS(); }