Merge pull request #54 from AnonymusRaccoon/echo2

Echo
This commit is contained in:
Arthi-chaud
2020-05-22 15:09:49 +02:00
committed by GitHub
5 changed files with 101 additions and 1 deletions
+3
View File
@@ -26,6 +26,7 @@ SRC = src/shell.c \
src/builtin/builtin_where.c \
src/builtin/builtin_alias.c \
src/builtin/builtin_unalias.c \
src/builtin/builtin_echo.c \
src/signal.c \
src/free_env.c \
src/utility/same_var.c \
@@ -54,6 +55,8 @@ TESTS = tests/tenv.c \
tests/targc.c \
tests/texecute.c \
tests/tcd.c \
tests/tsource.c \
tests/techo.c
COVERAGE = -lcriterion --coverage
+5 -1
View File
@@ -28,6 +28,7 @@ int builtin_source(char **argv, env_t *env);
int builtin_history(char **args, env_t *env);
int builtin_alias(char **args, env_t *env);
int builtin_unalias(char **args, env_t *env);
int builtin_echo(char **args, env_t *env);
//utility
bool find_path_in_builtins(char *cmd);
char **get_envpath(env_t *env);
@@ -52,4 +53,7 @@ void print_aliases(alias_t *list);
int add_alias_to_list(alias_t **list, alias_t *elem, char *alias);
//unalias
void remove_alias(char *alias, alias_t **list);
void remove_alias(char *alias, alias_t **list);
//echo
int print_char(char *str, int i);
+50
View File
@@ -0,0 +1,50 @@
/*
** EPITECH PROJECT, 2020
** builtin_echo.c
** File description:
** builtin_echo
*/
#include "builtin.h"
#include <shell.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int builtin_echo(char **argv, env_t *env)
{
for (int i = 1; argv[i]; i++) {
for (int j = 0; argv[i][j]; j++)
j += print_char(argv[i], j);
if (argv[i + 1])
printf(" ");
}
printf("\n");
fflush(stdout);
env->vars = my_setenv(env->vars, "?", "0");
return (0);
}
int print_char(char *str, int i)
{
if (str[i] == '\\' && str[i + 1] == 'a')
return (printf("\a"));
if (str[i] == '\\' && str[i + 1] == 'b')
return (printf("\b"));
if (str[i] == '\\' && str[i + 1] == 't')
return (printf("\t"));
if (str[i] == '\\' && str[i + 1] == 'n')
return (printf("\n"));
if (str[i] == '\\' && str[i + 1] == 'v')
return (printf("\v"));
if (str[i] == '\\' && str[i + 1] == 'f')
return (printf("\f"));
if (str[i] == '\\' && str[i + 1] == 'r')
return (printf("\r"));
if (str[i] == '\\') {
printf("\\%c", str[i + 1]);
return (1);
}
printf("%c", str[i]);
return (0);
}
+1
View File
@@ -27,6 +27,7 @@ const builtin builtins[] = {
{"source", &builtin_source},
{"alias", &builtin_alias},
{"unalias", &builtin_unalias},
{"echo", &builtin_echo},
{NULL, NULL}
};
+42
View File
@@ -0,0 +1,42 @@
/*
** EPITECH PROJECT, 2020
** test_echo.c
** File description:
** techo
*/
#include <criterion/redirect.h>
#include <criterion/criterion.h>
#include "builtin.h"
Test(echo, normal_message, .init = cr_redirect_stdout)
{
env_t env = {};
char *av[] = {"echo", "hello", NULL};
builtin_echo(av, &env);
cr_assert_stdout_eq_str("hello\n");
}
Test(echo, with_simple_backslash, .init = cr_redirect_stdout)
{
env_t env = {};
char *av[] = {"echo", "\\n", NULL};
builtin_echo(av, &env);
cr_assert_stdout_eq_str("\n\n");
}
Test(echo, incorrect_ascii, .init = cr_redirect_stdout)
{
env_t env = {};
char *av[] = {"echo", "\\q", NULL};
builtin_echo(av, &env);
cr_assert_stdout_eq_str("\\q\n");
}
Test(echo, multiple_args, .init = cr_redirect_stdout)
{
env_t env = {};
char *av[] = {"echo", "Hello", "I\'m", "Marvin", NULL};
builtin_echo(av, &env);
cr_assert_stdout_eq_str("Hello I\'m Marvin\n");
}