OSDN Git Service

Merge pull request #201 from Bytom/v0.1
[bytom/vapor.git] / vendor / github.com / bytom / common / bech32 / bech32_test.go
diff --git a/vendor/github.com/bytom/common/bech32/bech32_test.go b/vendor/github.com/bytom/common/bech32/bech32_test.go
new file mode 100644 (file)
index 0000000..da9beb8
--- /dev/null
@@ -0,0 +1,63 @@
+package bech32
+
+import (
+       "strings"
+       "testing"
+)
+
+func TestBech32(t *testing.T) {
+       tests := []struct {
+               str   string
+               valid bool
+       }{
+               {"A12UEL5L", true},
+               {"an83characterlonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1tt5tgs", true},
+               {"abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", true},
+               {"11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", true},
+               {"split1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", true},
+               {"split1checkupstagehandshakeupstreamerranterredcaperred2y9e2w", false},                                // invalid checksum
+               {"s lit1checkupstagehandshakeupstreamerranterredcaperredp8hs2p", false},                                // invalid character (space) in hrp
+               {"spl" + string(127) + "t1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", false},              // invalid character (DEL) in hrp
+               {"split1cheo2y9e2w", false},                                                                            // invalid character (o) in data part
+               {"split1a2y9w", false},                                                                                 // too short data part
+               {"1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", false},                                     // empty hrp
+               {"11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", false}, // too long
+       }
+
+       for _, test := range tests {
+               str := test.str
+               hrp, decoded, err := Bech32Decode(str)
+               if !test.valid {
+                       // Invalid string decoding should result in error.
+                       if err == nil {
+                               t.Error("expected decoding to fail for "+
+                                       "invalid string %v", test.str)
+                       }
+                       continue
+               }
+
+               // Valid string decoding should result in no error.
+               if err != nil {
+                       t.Errorf("expected string to be valid bech32: %v", err)
+               }
+
+               // Check that it encodes to the same string
+               encoded, err := Bech32Encode(hrp, decoded)
+               if err != nil {
+                       t.Errorf("encoding failed: %v", err)
+               }
+
+               if encoded != strings.ToLower(str) {
+                       t.Errorf("expected data to encode to %v, but got %v",
+                               str, encoded)
+               }
+
+               // Flip a bit in the string an make sure it is caught.
+               pos := strings.LastIndexAny(str, "1")
+               flipped := str[:pos+1] + string((str[pos+1] ^ 1)) + str[pos+2:]
+               _, _, err = Bech32Decode(flipped)
+               if err == nil {
+                       t.Error("expected decoding to fail")
+               }
+       }
+}