123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- // Not sure where to begin with gtest?
- //
- // What can I test with gtest?
- //
- // googletest/googletest/docs/primer.md
- #include "terminal.h"
- #include "gtest/gtest.h"
- #include <string>
- /*
- struct console_details {
- int posx, posy;
- int savedx, savedy;
- char ansi[20]; // current ANSI command being processed.
- int in_ansi;
- int fgcolor; // 0-7 // not 0-15
- int bgcolor; // 0-7
- int status; // 0, 1 or 5 (Blink)
- };
- enum ANSI_TYPE { START, CURSOR, COLOR, CLEAR, OTHER };
- struct termchar {
- int in_ansi;
- ANSI_TYPE ansi; // undefined if in_ansi is false
- };
- void console_init(struct console_details *cdp);
- void ansi_color(struct console_details *cdp, int color);
- const char *color_restore(struct console_details *cdp);
- ANSI_TYPE console_ansi(struct console_details *cdp, const char *ansi);
- termchar console_char(struct console_details *cdp, char ch);
- void console_receive(struct console_details *cdp, std::string chars);
- // Ok, it's a problem testing this. :(
- class Terminal {
- private:
- int posx, posy;
- std::vector<std::pair<int, int>> saved_cursor_position;
- std::string ansi;
- int in_ansi;
- int fgcolor, bgcolor, status;
- enum ANSI_TYPE { START, CURSOR, COLOR, CLEAR, OTHER };
- struct termchar {
- int in_ansi;
- ANSI_TYPE ansi;
- };
- public:
- Terminal(void);
- void init(void);
- std::string color_restore(void);
- termchar putchar(char ch);
- void putstring(std::string text);
- private:
- void ansi_color(int color);
- ANSI_TYPE ansi_code(std::string ansi);
- };
- */
- console_details console;
- const std::string reset("\x1b[0m\x1b[2J\x1b[1;1H");
- #define GTEST_COUT std::cerr << "[ ] [ INFO ]"
- namespace {
- TEST(ConsoleInit, init) {
- console_init(&console);
- ASSERT_EQ(console.posx, 0);
- ASSERT_EQ(console.posy, 0);
- ASSERT_EQ(console.in_ansi, 0);
- ASSERT_EQ(console.ansi[0], 0);
- ASSERT_EQ(console.status, 0);
- ASSERT_EQ(console.bgcolor, 0);
- ASSERT_EQ(console.fgcolor, 7);
- // std::string reset("\x1b[0m\x1b[2J\x1b[1;1H");
- console_receive(&console, reset);
- ASSERT_EQ(console.posx, 0);
- ASSERT_EQ(console.posy, 0);
- ASSERT_EQ(console.in_ansi, 0);
- ASSERT_EQ(console.ansi[0], 0);
- ASSERT_EQ(console.status, 0);
- ASSERT_EQ(console.bgcolor, 0);
- ASSERT_EQ(console.fgcolor, 7);
- }
- TEST(ConsoleBasic, simpleString) {
- console_init(&console);
- std::string send("Hello");
- console_receive(&console, send);
- ASSERT_NE(console.posx, 0);
- ASSERT_EQ(console.posx, (int)send.size());
- ASSERT_EQ(console.posy, 0);
- console_receive(&console, reset);
- ASSERT_EQ(console.posx, 0);
- ASSERT_EQ(console.posy, 0);
- send = "Hello\r\n";
- console_receive(&console, send);
- ASSERT_EQ(console.posx, 0);
- ASSERT_EQ(console.posy, 1);
- }
- TEST(ConsolePosition, simplePositions) {
- console_init(&console);
- std::string send("\x1b[10;5H"); // Y;X
- console_receive(&console, send);
- ASSERT_EQ(console.posx, 4);
- ASSERT_EQ(console.posy, 9);
- std::string save_pos("\x1b[s");
- std::string restore_pos("\x1b[u");
- console_receive(&console, save_pos);
- ASSERT_EQ(console.posx, 4);
- ASSERT_EQ(console.posy, 9);
- send = "\x1b[5;10H";
- console_receive(&console, send);
- ASSERT_EQ(console.posx, 9);
- ASSERT_EQ(console.posy, 4);
- console_receive(&console, restore_pos);
- ASSERT_EQ(console.posx, 4);
- ASSERT_EQ(console.posy, 9);
- }
- TEST(ConsoleCRNL, NLCRTests) {
- console_init(&console);
- std::string send("Hello\r");
- console_receive(&console, send);
- ASSERT_EQ(console.posx, 0);
- ASSERT_EQ(console.posy, 0);
- send = "Hello\n";
- console_receive(&console, send);
- ASSERT_EQ(console.posy, 1);
- ASSERT_EQ(console.posx, 5);
- console_receive(&console, reset);
- send = "Hello\r\n";
- console_receive(&console, send);
- ASSERT_EQ(console.posx, 0);
- ASSERT_EQ(console.posy, 1);
- }
- TEST(Terminal, init) {
- Terminal term;
- ASSERT_EQ(term.getx(), 0);
- ASSERT_EQ(term.gety(), 0);
- ASSERT_EQ(term.inANSI(), 0);
- ASSERT_TRUE(term.ansiempty());
- ASSERT_EQ(term.getstatus(), 0);
- ASSERT_EQ(term.bg(), 0);
- ASSERT_EQ(term.fg(), 7);
- term.putstring(reset);
- ASSERT_EQ(term.getx(), 0);
- ASSERT_EQ(term.gety(), 0);
- ASSERT_EQ(term.inANSI(), 0);
- ASSERT_TRUE(term.ansiempty());
- ASSERT_EQ(term.getstatus(), 0);
- ASSERT_EQ(term.bg(), 0);
- ASSERT_EQ(term.fg(), 7);
- }
- TEST(TerminalBasic, simpleString) {
- Terminal term;
- std::string send("Hello");
- term.putstring(send);
- ASSERT_NE(term.getx(), 0);
- ASSERT_EQ(term.getx(), (int)send.size());
- ASSERT_EQ(term.gety(), 0);
- term.putstring(reset);
- ASSERT_EQ(term.getx(), 0);
- ASSERT_EQ(term.gety(), 0);
- send = "Hello\r\n";
- term.putstring(send);
- ASSERT_EQ(term.getx(), 0);
- ASSERT_EQ(term.gety(), 1);
- }
- TEST(TerminalPosition, simplePositions) {
- Terminal term;
- std::string send("\x1b[10;5H"); // Y;X
- term.putstring(send);
- ASSERT_EQ(term.getx(), 4);
- ASSERT_EQ(term.gety(), 9);
- std::string save_pos("\x1b[s");
- std::string restore_pos("\x1b[u");
- term.putstring(save_pos);
- ASSERT_EQ(term.getx(), 4);
- ASSERT_EQ(term.gety(), 9);
- send = "\x1b[5;10H";
- term.putstring(send);
- ASSERT_EQ(term.getx(), 9);
- ASSERT_EQ(term.gety(), 4);
- term.putstring(restore_pos);
- ASSERT_EQ(term.getx(), 4);
- ASSERT_EQ(term.gety(), 9);
- }
- TEST(TerminalCRNL, NLCRTests) {
- Terminal term;
- std::string send("Hello\r");
- term.putstring(send);
- ASSERT_EQ(term.getx(), 0);
- ASSERT_EQ(term.gety(), 0);
- send = "Hello\n";
- term.putstring(send);
- ASSERT_EQ(term.getx(), 5);
- ASSERT_EQ(term.gety(), 1);
- term.putstring(reset);
- send = "Hello\r\n";
- term.putstring(send);
- ASSERT_EQ(term.getx(), 0);
- ASSERT_EQ(term.gety(), 1);
- }
- } // namespace
|