github.com/kolbycrouch/elvish@v0.14.1-0.20210614162631-215b9ac1c423/pkg/wcwidth/wcwidth_test.go (about)

     1  package wcwidth
     2  
     3  import (
     4  	"testing"
     5  
     6  	"src.elv.sh/pkg/tt"
     7  )
     8  
     9  var Args = tt.Args
    10  
    11  func TestOf(t *testing.T) {
    12  	tt.Test(t, tt.Fn("Of", Of), tt.Table{
    13  		Args("\u0301").Rets(0), // Combining acute accent
    14  		Args("a").Rets(1),
    15  		Args("Ω").Rets(1),
    16  		Args("好").Rets(2),
    17  		Args("か").Rets(2),
    18  
    19  		Args("abc").Rets(3),
    20  		Args("你好").Rets(4),
    21  	})
    22  }
    23  
    24  func TestOverride(t *testing.T) {
    25  	r := '❱'
    26  	oldw := OfRune(r)
    27  	w := oldw + 1
    28  
    29  	Override(r, w)
    30  	if OfRune(r) != w {
    31  		t.Errorf("Wcwidth(%q) != %d after OverrideWcwidth", r, w)
    32  	}
    33  	Unoverride(r)
    34  	if OfRune(r) != oldw {
    35  		t.Errorf("Wcwidth(%q) != %d after UnoverrideWcwidth", r, oldw)
    36  	}
    37  }
    38  
    39  func TestOverride_NegativeWidthRemovesOverride(t *testing.T) {
    40  	Override('x', 2)
    41  	Override('x', -1)
    42  	if OfRune('x') != 1 {
    43  		t.Errorf("Override with negative width did not remove override")
    44  	}
    45  }
    46  
    47  func TestConcurrentOverride(t *testing.T) {
    48  	go Override('x', 2)
    49  	_ = OfRune('x')
    50  }
    51  
    52  func TestTrim(t *testing.T) {
    53  	tt.Test(t, tt.Fn("Trim", Trim), tt.Table{
    54  		Args("abc", 1).Rets("a"),
    55  		Args("abc", 2).Rets("ab"),
    56  		Args("abc", 3).Rets("abc"),
    57  		Args("abc", 4).Rets("abc"),
    58  
    59  		Args("你好", 1).Rets(""),
    60  		Args("你好", 2).Rets("你"),
    61  		Args("你好", 3).Rets("你"),
    62  		Args("你好", 4).Rets("你好"),
    63  		Args("你好", 5).Rets("你好"),
    64  	})
    65  }
    66  
    67  func TestForce(t *testing.T) {
    68  	tt.Test(t, tt.Fn("Force", Force), tt.Table{
    69  		// Trimming
    70  		Args("abc", 2).Rets("ab"),
    71  		Args("你好", 2).Rets("你"),
    72  		// Padding
    73  		Args("abc", 4).Rets("abc "),
    74  		Args("你好", 5).Rets("你好 "),
    75  		// Trimming and Padding
    76  		Args("你好", 3).Rets("你 "),
    77  	})
    78  }
    79  
    80  func TestTrimEachLine(t *testing.T) {
    81  	tt.Test(t, tt.Fn("TrimEachLine", TrimEachLine), tt.Table{
    82  		Args("abcdefg\n你好", 3).Rets("abc\n你"),
    83  	})
    84  }