mittos64/src/kernel/boot/debug.tt

118 lines
2.3 KiB
C

// vim: ft=c
#include <ttest.h>
#include "debug.c"
#define BUFFER_SIZE 16
char vga_recv[BUFFER_SIZE];
char serial_recv[BUFFER_SIZE];
BEFORE()
{
for(int i = 0; i < BUFFER_SIZE; i++)
{
vga_recv[i] = '\0';
serial_recv[i] = '\0';
}
}
void vga_write(char c)
{
static int i = 0;
vga_recv[i++] = c;
}
void serial_write(uint16_t port, uint8_t c)
{
(void)port;
static int i = 0;
serial_recv[i++] = (char)c;
}
TEST(putch_sends_character_to_vga)
{
char input = 'a';
debug_putch(input);
ASSERT_EQ_CHR(vga_recv[0], input);
}
TEST(putch_sends_character_to_serial)
{
char input = 'a';
debug_putch(input);
ASSERT_EQ_CHR(serial_recv[0], input);
}
TEST(putsn_writes_string)
{
char *str = "hello";
debug_putsn(str, 5);
ASSERT_EQ_STR(vga_recv, str, BUFFER_SIZE);
}
TEST(putsn_writes_correct_number_of_characters)
{
char *str = "1234567890";
debug_putsn(str, 5);
ASSERT_EQ_STR(vga_recv, "12345", BUFFER_SIZE);
}
TEST(puts_writes_string)
{
char *str = "world";
debug_puts(str);
ASSERT_EQ_STR(vga_recv, str, BUFFER_SIZE);
}
TEST(printf_prints_string)
{
char *str = "Hello, world!";
debug_printf(str);
ASSERT_EQ_STR(vga_recv, str, BUFFER_SIZE);
}
TEST(printf_does_not_print_percent)
{
debug_printf("123%d", 45);
ASSERT_NEQ_CHR(vga_recv[3], '%');
}
TEST(printf_prints_binary_number)
{
debug_printf("%b", 0x55aa);
ASSERT_EQ_STR(vga_recv, "101010110101010", BUFFER_SIZE);
}
TEST(printf_prints_ocal_number)
{
debug_printf("%o", 8);
ASSERT_EQ_STR(vga_recv, "10", BUFFER_SIZE);
}
TEST(printf_prints_decimal_number)
{
debug_printf("%d", 123);
ASSERT_EQ_STR(vga_recv, "123", BUFFER_SIZE);
}
TEST(printf_prints_hexadecimal_number)
{
debug_printf("%x", 42);
ASSERT_EQ_STR(vga_recv, "2A", BUFFER_SIZE);
}
TEST(printf_prints_char)
{
debug_printf("%c", 'X');
ASSERT_EQ_STR(vga_recv, "X", BUFFER_SIZE);
}
TEST(printf_prints_passed_string)
{
debug_printf("%s", "asdf");
ASSERT_EQ_STR(vga_recv, "asdf", BUFFER_SIZE);
}
TEST(printf_keeps_printing_after_number)
{
debug_printf("%x123", 0);
ASSERT_EQ_STR(vga_recv, "0123", BUFFER_SIZE);
}
TEST(printf_prints_text_around_number)
{
debug_printf("ABC%dDEF", 0);
ASSERT_EQ_STR(vga_recv, "ABC0DEF", BUFFER_SIZE);
}
TEST(printf_keeps_going_for_unknown_format_specifier)
{
debug_printf("%y");
ASSERT_EQ_STR(vga_recv, "%y", BUFFER_SIZE);
}