mirror of
https://codeberg.org/la-chouette/minishell.git
synced 2025-12-06 07:28:09 +01:00
116 lines
3.8 KiB
C
116 lines
3.8 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* quote_removal.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: khais <marvin@42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2025/02/28 13:46:56 by khais #+# #+# */
|
|
/* Updated: 2025/03/07 11:24:30 by khais ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "../src/parser/wordlist/wordlist.h"
|
|
#include "../src/parser/wordsplit/wordsplit.h"
|
|
#include "../src/parser/remove_quotes/remove_quotes.h"
|
|
#include "testutil.h"
|
|
#include <assert.h>
|
|
|
|
static t_worddesc *create_single_word(char *str)
|
|
{
|
|
t_wordlist *words = minishell_wordsplit(str);
|
|
assert(wordlist_get(words, 0) != NULL);
|
|
assert(wordlist_get(words, 1) == NULL);
|
|
t_worddesc *word = wordlist_pop(&words);
|
|
return (word);
|
|
}
|
|
|
|
static void test_quote_removal_no_quotes_single_word(void)
|
|
{
|
|
t_worddesc *word = create_single_word("word");
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert_strequal("word", got_word->word);
|
|
assert(got_word->marker == NULL);
|
|
worddesc_destroy(word);
|
|
worddesc_destroy(got_word);
|
|
}
|
|
|
|
static void test_quote_removal_null(void)
|
|
{
|
|
t_worddesc *word = NULL;
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert(got_word == NULL);
|
|
}
|
|
|
|
static void test_quote_removal_single_quotes(void)
|
|
{
|
|
t_worddesc *word = create_single_word("'word'");
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert_strequal("word", got_word->word);
|
|
assert(got_word->marker == NULL);
|
|
worddesc_destroy(word);
|
|
worddesc_destroy(got_word);
|
|
}
|
|
|
|
static void test_quote_removal_double_quotes(void)
|
|
{
|
|
t_worddesc *word = create_single_word("\"word\"");
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert_strequal("word", got_word->word);
|
|
assert(got_word->marker == NULL);
|
|
worddesc_destroy(word);
|
|
worddesc_destroy(got_word);
|
|
}
|
|
|
|
static void test_quote_removal_mixed_single_in_double(void)
|
|
{
|
|
t_worddesc *word = create_single_word("\"'word'\"");
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert_strequal("'word'", got_word->word);
|
|
assert(got_word->marker == NULL);
|
|
worddesc_destroy(word);
|
|
worddesc_destroy(got_word);
|
|
}
|
|
|
|
static void test_quote_removal_mixed_double_in_single(void)
|
|
{
|
|
t_worddesc *word = create_single_word("'\"word\"'");
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert_strequal("\"word\"", got_word->word);
|
|
assert(got_word->marker == NULL);
|
|
worddesc_destroy(word);
|
|
worddesc_destroy(got_word);
|
|
}
|
|
|
|
static void test_quote_removal_middle_of_word(void)
|
|
{
|
|
t_worddesc *word = create_single_word("var='VALUE'here");
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert_strequal("var=VALUEhere", got_word->word);
|
|
assert(got_word->marker == NULL);
|
|
worddesc_destroy(word);
|
|
worddesc_destroy(got_word);
|
|
}
|
|
|
|
static void test_quote_removal_nested_middle_of_word(void)
|
|
{
|
|
t_worddesc *word = create_single_word("var=\"'VALUE'here\"");
|
|
t_worddesc *got_word = remove_quotes(word);
|
|
assert_strequal("var='VALUE'here", got_word->word);
|
|
assert(got_word->marker == NULL);
|
|
worddesc_destroy(word);
|
|
worddesc_destroy(got_word);
|
|
}
|
|
|
|
|
|
int main(void) {
|
|
test_quote_removal_no_quotes_single_word();
|
|
test_quote_removal_null();
|
|
test_quote_removal_single_quotes();
|
|
test_quote_removal_double_quotes();
|
|
test_quote_removal_mixed_single_in_double();
|
|
test_quote_removal_mixed_double_in_single();
|
|
test_quote_removal_middle_of_word();
|
|
test_quote_removal_nested_middle_of_word();
|
|
return (0);
|
|
}
|