github.com/Kintar/etxt@v0.0.0-20221224033739-2fc69f000137/renderer_iterator_test.go (about)

     1  //go:build gtxt
     2  
     3  package etxt
     4  
     5  import "testing"
     6  
     7  func testFailRunes(t *testing.T, expected rune, got rune) {
     8  	t.Fatalf("expected '%s', got '%s'", string(expected), string(got))
     9  }
    10  
    11  func testFailStr(t *testing.T, expected string, got string) {
    12  	t.Fatalf("expected '%s', got '%s'", expected, got)
    13  }
    14  
    15  func TestStrIterator(t *testing.T) {
    16  	// simple case
    17  	iter := newStrIterator("one day", false)
    18  	for _, expected := range []rune{'o', 'n', 'e', ' ', 'd', 'a', 'y', -1, -1, -1} {
    19  		got := iter.Next()
    20  		if got != expected {
    21  			testFailRunes(t, expected, got)
    22  		}
    23  	}
    24  	iter = newStrIterator("one day", false)
    25  	expected, got := "one day", iter.UntilNextLineBreak()
    26  	if got != expected {
    27  		testFailStr(t, expected, got)
    28  	}
    29  
    30  	// line breaks
    31  	iter = newStrIterator("0123\n0123\n", false)
    32  	expected, got = "0123", iter.UntilNextLineBreak()
    33  	if got != expected {
    34  		testFailStr(t, expected, got)
    35  	}
    36  	for _, expected := range []rune{'0', '1', '2', '3'} {
    37  		got := iter.Next()
    38  		if got != expected {
    39  			testFailRunes(t, expected, got)
    40  		}
    41  	}
    42  	expected, got = "", iter.UntilNextLineBreak()
    43  	if got != expected {
    44  		testFailStr(t, expected, got)
    45  	}
    46  	gotRune := iter.Next()
    47  	if gotRune != '\n' {
    48  		testFailRunes(t, '\n', gotRune)
    49  	}
    50  	expected, got = "0123", iter.UntilNextLineBreak()
    51  	if got != expected {
    52  		testFailStr(t, expected, got)
    53  	}
    54  	gotRune = iter.Next()
    55  	if gotRune != '0' {
    56  		testFailRunes(t, '0', gotRune)
    57  	}
    58  	expected, got = "123", iter.UntilNextLineBreak()
    59  	if got != expected {
    60  		testFailStr(t, expected, got)
    61  	}
    62  	for i := 0; i < 3; i++ {
    63  		iter.Next()
    64  	}
    65  	expected, got = "", iter.UntilNextLineBreak()
    66  	if got != expected {
    67  		testFailStr(t, expected, got)
    68  	}
    69  	gotRune = iter.Next()
    70  	if gotRune != '\n' {
    71  		testFailRunes(t, '\n', gotRune)
    72  	}
    73  
    74  	// no ending line break
    75  	iter = newStrIterator("B\nA", false)
    76  	expected, got = "B", iter.UntilNextLineBreak()
    77  	if got != expected {
    78  		testFailStr(t, expected, got)
    79  	}
    80  	gotRune = iter.Next()
    81  	if gotRune != 'B' {
    82  		testFailRunes(t, 'B', gotRune)
    83  	}
    84  	expected, got = "", iter.UntilNextLineBreak()
    85  	if got != expected {
    86  		testFailStr(t, expected, got)
    87  	}
    88  	gotRune = iter.Next()
    89  	if gotRune != '\n' {
    90  		testFailRunes(t, '\n', gotRune)
    91  	}
    92  	expected, got = "A", iter.UntilNextLineBreak()
    93  	if got != expected {
    94  		testFailStr(t, expected, got)
    95  	}
    96  	gotRune = iter.Next()
    97  	if gotRune != 'A' {
    98  		testFailRunes(t, 'A', gotRune)
    99  	}
   100  	gotRune = iter.Next()
   101  	if gotRune != -1 {
   102  		testFailRunes(t, -1, gotRune)
   103  	}
   104  	expected, got = "", iter.UntilNextLineBreak()
   105  	if got != expected {
   106  		testFailStr(t, expected, got)
   107  	}
   108  }
   109  
   110  func TestStrIteratorReverse(t *testing.T) {
   111  	iter := newStrIterator("0123\nAB CD\n", true)
   112  	expected, got := "0123", iter.UntilNextLineBreak()
   113  	if got != expected {
   114  		testFailStr(t, expected, got)
   115  	}
   116  	for _, expected := range []rune{'3', '2', '1', '0'} {
   117  		got := iter.Next()
   118  		if got != expected {
   119  			testFailRunes(t, expected, got)
   120  		}
   121  	}
   122  	expected, got = "", iter.UntilNextLineBreak()
   123  	if got != expected {
   124  		testFailStr(t, expected, got)
   125  	}
   126  	gotRune := iter.Next()
   127  	if gotRune != '\n' {
   128  		testFailRunes(t, '\n', gotRune)
   129  	}
   130  	expected, got = "AB CD", iter.UntilNextLineBreak()
   131  	if got != expected {
   132  		testFailStr(t, expected, got)
   133  	}
   134  	gotRune = iter.Next()
   135  	if gotRune != 'D' {
   136  		testFailRunes(t, 'D', gotRune)
   137  	}
   138  	expected, got = "AB C", iter.UntilNextLineBreak()
   139  	if got != expected {
   140  		testFailStr(t, expected, got)
   141  	}
   142  	for _, expected := range []rune{'C', ' ', 'B', 'A'} {
   143  		got := iter.Next()
   144  		if got != expected {
   145  			testFailRunes(t, expected, got)
   146  		}
   147  	}
   148  	expected, got = "", iter.UntilNextLineBreak()
   149  	if got != expected {
   150  		testFailStr(t, expected, got)
   151  	}
   152  	gotRune = iter.Next()
   153  	if gotRune != '\n' {
   154  		testFailRunes(t, '\n', gotRune)
   155  	}
   156  	gotRune = iter.Next()
   157  	if gotRune != -1 {
   158  		testFailRunes(t, -1, gotRune)
   159  	}
   160  }
   161  
   162  func TestGlyphsIterator(t *testing.T) {
   163  	iter := newGlyphsIterator([]GlyphIndex{1, 2, 3, 4}, false)
   164  	for n, expected := range []GlyphIndex{1, 2, 3, 4} {
   165  		got, done := iter.Next()
   166  		if done {
   167  			t.Fatalf("test#%d unexpectedly done", n)
   168  		}
   169  		if got != expected {
   170  			t.Fatalf("test#%d expected %d got %d", n, expected, got)
   171  		}
   172  	}
   173  
   174  	got, done := iter.Next()
   175  	if got != 0 || !done {
   176  		t.Fatalf("expected done")
   177  	}
   178  }
   179  
   180  func TestGlyphsIteratorReverse(t *testing.T) {
   181  	iter := newGlyphsIterator([]GlyphIndex{1, 2, 3, 4}, true)
   182  	for n, expected := range []GlyphIndex{4, 3, 2, 1} {
   183  		got, done := iter.Next()
   184  		if done {
   185  			t.Fatalf("test#%d unexpectedly done", n)
   186  		}
   187  		if got != expected {
   188  			t.Fatalf("test#%d expected %d got %d", n, expected, got)
   189  		}
   190  	}
   191  
   192  	got, done := iter.Next()
   193  	if got != 0 || !done {
   194  		t.Fatalf("expected done")
   195  	}
   196  }