From 2f4cb88d5c60f725323739300bb49dfa8923e7d5 Mon Sep 17 00:00:00 2001 From: Albert Cervin Date: Wed, 2 Nov 2022 22:20:04 +0100 Subject: =?UTF-8?q?=F0=9F=8E=89=20And=20so=20it=20begins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/text.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 test/text.c (limited to 'test/text.c') diff --git a/test/text.c b/test/text.c new file mode 100644 index 0000000..ec99890 --- /dev/null +++ b/test/text.c @@ -0,0 +1,82 @@ +#include "assert.h" +#include "test.h" + +#include "text.h" + +#include +#include +#include + +void assert_line_equal(struct txt_line *line) {} + +void test_add_text() { + uint32_t lines_added, cols_added; + struct text *t = text_create(10); + const char *txt = "This is line 1\n"; + text_append(t, 0, 0, (uint8_t *)txt, strlen(txt), &lines_added, &cols_added); + ASSERT(text_num_lines(t) == 2, + "Expected text to have two lines after insertion"); + + ASSERT(text_line_size(t, 0) == 14 && text_line_length(t, 0) == 14, + "Expected line 1 to have 14 chars and 14 bytes"); + ASSERT_STR_EQ((const char *)text_get_line(t, 0).text, "This is line 1", + "Expected line 1 to be line 1"); + + const char *txt2 = "This is line 2\n"; + text_append(t, 1, 0, (uint8_t *)txt2, strlen(txt2), &lines_added, + &cols_added); + ASSERT_STR_EQ((const char *)text_get_line(t, 1).text, "This is line 2", + "Expected line 2 to be line 2"); +} + +void test_delete_text() { + uint32_t lines_added, cols_added; + struct text *t = text_create(10); + const char *txt = "This is line 1"; + text_append(t, 0, 0, (uint8_t *)txt, strlen(txt), &lines_added, &cols_added); + + text_delete(t, 0, 12, 2); + ASSERT(text_line_length(t, 0) == 12, + "Expected line to be 12 chars after deleting two"); + ASSERT(strncmp((const char *)text_get_line(t, 0).text, "This is line", + text_line_size(t, 0)) == 0, + "Expected two chars to be deleted"); + + text_delete(t, 0, 0, 25); + ASSERT(text_get_line(t, 0).nbytes == 0, + "Expected line to be empty after many chars removed"); + + const char *txt2 = "This is line 1\nThis is line 2\nThis is line 3"; + text_append(t, 0, 0, (uint8_t *)txt2, strlen(txt2), &lines_added, + &cols_added); + text_delete(t, 1, 11, 3); + ASSERT(text_line_length(t, 1) == 11, + "Expected line to contain 11 chars after deletion"); + struct txt_line line = text_get_line(t, 1); + ASSERT(strncmp((const char *)line.text, "This is lin", line.nbytes) == 0, + "Expected deleted characters to be gone in the second line"); + + // test utf-8 + struct text *t2 = text_create(10); + const char *txt3 = "Emojis: 🇫🇮 🐮\n"; + text_append(t2, 0, 0, (uint8_t *)txt3, strlen(txt3), &lines_added, + &cols_added); + + // TODO: Fix when graphemes are implemented, should be 11, right now it counts + // the two unicode code points 🇫 and 🇮 as two chars. + ASSERT(text_line_length(t2, 0) == 12, + "Line length should be 12 (even though there " + "are more bytes in the line)."); + + text_delete(t2, 0, 10, 2); + ASSERT(text_line_length(t2, 0) == 10, + "Line length should be 10 after deleting the cow emoji and a space"); + struct txt_line line2 = text_get_line(t2, 0); + ASSERT(strncmp((const char *)line2.text, "Emojis: 🇫🇮", line2.nbytes) == 0, + "Expected cow emoji plus space to be deleted"); +} + +void run_text_tests() { + run_test(test_add_text); + run_test(test_delete_text); +} -- cgit v1.2.3