github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/libkb/paperkey_phrase_test.go (about)

     1  // Copyright 2015 Keybase, Inc. All rights reserved. Use of
     2  // this source code is governed by the included BSD license.
     3  
     4  package libkb
     5  
     6  import (
     7  	"strings"
     8  	"testing"
     9  )
    10  
    11  func TestPaperKeyPhraseBasics(t *testing.T) {
    12  	p, err := MakePaperKeyPhrase(0)
    13  	if err != nil {
    14  		t.Fatal(err)
    15  	}
    16  	q := NewPaperKeyPhrase(p.String())
    17  	version, err := q.Version()
    18  	if err != nil {
    19  		t.Fatal(err)
    20  	}
    21  	if version != 0 {
    22  		t.Errorf("version: %d, expected 0", version)
    23  	}
    24  }
    25  
    26  func TestPaperKeyPhraseTypos(t *testing.T) {
    27  	p, err := MakePaperKeyPhrase(0)
    28  	if err != nil {
    29  		t.Fatal(err)
    30  	}
    31  
    32  	equivs := []string{
    33  		p.String(),
    34  		"   " + p.String(),
    35  		p.String() + "  ",
    36  		" " + p.String() + " ",
    37  		"\t" + p.String() + "  ",
    38  		" " + p.String() + "\t",
    39  		strings.Join(strings.Split(p.String(), " "), "   "),
    40  		strings.ToTitle(p.String()),
    41  		strings.ToUpper(p.String()),
    42  	}
    43  
    44  	for _, s := range equivs {
    45  		q := NewPaperKeyPhrase(s)
    46  		version, err := q.Version()
    47  		if err != nil {
    48  			t.Fatal(err)
    49  		}
    50  		if version != 0 {
    51  			t.Errorf("input: %q => version: %d, expected 0", s, version)
    52  		}
    53  		if q.String() != p.String() {
    54  			t.Errorf("input: %q => phrase %q, expected %q", s, q.String(), p.String())
    55  		}
    56  		if len(q.InvalidWords()) > 0 {
    57  			t.Errorf("input: %q => phrase %q, contains invalid words %v", s, q.String(), q.InvalidWords())
    58  		}
    59  	}
    60  
    61  	// make a typo in one of the words
    62  	w := strings.Fields(p.String())
    63  	w[0] += "qx"
    64  	x := strings.Join(w, " ")
    65  	q := NewPaperKeyPhrase(x)
    66  
    67  	// version should still be ok
    68  	version, err := q.Version()
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	if version != 0 {
    73  		t.Errorf("input: %q => version: %d, expected 0", x, version)
    74  	}
    75  
    76  	// but InvalidWords should return the first word as invalid
    77  	if len(q.InvalidWords()) == 0 {
    78  		t.Fatalf("input: %q => all words valid, expected %s to be invalid", x, w[0])
    79  	}
    80  
    81  	if q.InvalidWords()[0] != w[0] {
    82  		t.Errorf("input: %q => invalid words %v, expected %s", x, q.InvalidWords(), w[0])
    83  	}
    84  }