Browse Source

Updated terminal class / copy operator=

bugz 4 years ago
parent
commit
cb35264b57
3 changed files with 46 additions and 0 deletions
  1. 22 0
      terminal.cpp
  2. 5 0
      terminal.h
  3. 19 0
      test-terminal.cpp

+ 22 - 0
terminal.cpp

@@ -18,6 +18,28 @@ Everything else, I'm not sure I really care about.   (NNY!)
 
 Terminal::Terminal() { this->init(); }
 
+Terminal::Terminal(const Terminal &old) : saved_cursor_position( old.saved_cursor_position) {
+  posx = old.posx;
+  posy = old.posy;
+  in_ansi = old.in_ansi;
+  fgcolor = old.fgcolor;
+  bgcolor = old.bgcolor;
+  status = old.status;
+  ansi = old.ansi;                                 
+}
+
+Terminal & Terminal::operator=(Terminal &rhs) {
+  posx = rhs.posx;
+  posy = rhs.posy;
+  in_ansi = rhs.in_ansi;
+  fgcolor = rhs.fgcolor;
+  bgcolor = rhs.bgcolor;
+  status = rhs.status;
+  ansi = rhs.ansi;
+  saved_cursor_position = rhs.saved_cursor_position;
+  return *this;
+}
+
 void Terminal::init(void) {
   this->posx = this->posy = 0;
   this->in_ansi = 0;

+ 5 - 0
terminal.h

@@ -11,6 +11,8 @@ private:
   std::string ansi;
   int in_ansi;
   int fgcolor, bgcolor, status;
+
+public:
   enum ANSI_TYPE { START, CURSOR, COLOR, CLEAR, OTHER };
   struct termchar {
     int in_ansi;
@@ -19,6 +21,9 @@ private:
 
 public:
   Terminal(void);
+  Terminal(const Terminal &old);
+  Terminal &operator=(Terminal &rhs);
+
   void init(void);
   std::string color_restore(void);
   termchar putchar(char ch);

+ 19 - 0
test-terminal.cpp

@@ -179,14 +179,24 @@ TEST(TerminalBasic, simpleString) {
   ASSERT_EQ(term.getx(), (int)send.size());
   ASSERT_EQ(term.gety(), 0);
 
+  Terminal term2(term);
   term.putstring(reset);
   ASSERT_EQ(term.getx(), 0);
   ASSERT_EQ(term.gety(), 0);
 
+  // Verify that it matches the copy
+  ASSERT_NE(term2.getx(), 0);
+  ASSERT_EQ(term2.getx(), (int)send.size());
+  ASSERT_EQ(term2.gety(), 0);
+
   send = "Hello\r\n";
   term.putstring(send);
   ASSERT_EQ(term.getx(), 0);
   ASSERT_EQ(term.gety(), 1);
+
+  term2.putstring(send);
+  ASSERT_EQ(term2.getx(), 0);
+  ASSERT_EQ(term2.gety(), 1);
 }
 
 TEST(TerminalPosition, simplePositions) {
@@ -204,6 +214,9 @@ TEST(TerminalPosition, simplePositions) {
   ASSERT_EQ(term.getx(), 4);
   ASSERT_EQ(term.gety(), 9);
 
+  // Verify that saved cursor positions are copied as well.
+  Terminal term2(term); 
+
   send = "\x1b[5;10H";
   term.putstring(send);
   ASSERT_EQ(term.getx(), 9);
@@ -212,6 +225,12 @@ TEST(TerminalPosition, simplePositions) {
   term.putstring(restore_pos);
   ASSERT_EQ(term.getx(), 4);
   ASSERT_EQ(term.gety(), 9);
+
+  ASSERT_EQ(term2.getx(), 4);
+  ASSERT_EQ(term2.gety(), 9);
+  term2.putstring(restore_pos);
+  ASSERT_EQ(term2.getx(), 4);
+  ASSERT_EQ(term2.gety(), 9);
 }
 
 TEST(TerminalCRNL, NLCRTests) {