encoder_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package qr
  2. import (
  3. "fmt"
  4. "image/png"
  5. "os"
  6. "testing"
  7. "github.com/boombuler/barcode"
  8. )
  9. type test struct {
  10. Text string
  11. Mode Encoding
  12. ECL ErrorCorrectionLevel
  13. Result string
  14. }
  15. var tests = []test{
  16. test{
  17. Text: "hello world",
  18. Mode: Unicode,
  19. ECL: H,
  20. Result: `
  21. +++++++.+.+.+...+.+++++++
  22. +.....+.++...+++..+.....+
  23. +.+++.+.+.+.++.++.+.+++.+
  24. +.+++.+....++.++..+.+++.+
  25. +.+++.+..+...++.+.+.+++.+
  26. +.....+.+..+..+++.+.....+
  27. +++++++.+.+.+.+.+.+++++++
  28. ........++..+..+.........
  29. ..+++.+.+++.+.++++++..+++
  30. +++..+..+...++.+...+..+..
  31. +...+.++++....++.+..++.++
  32. ++.+.+.++...+...+.+....++
  33. ..+..+++.+.+++++.++++++++
  34. +.+++...+..++..++..+..+..
  35. +.....+..+.+.....+++++.++
  36. +.+++.....+...+.+.+++...+
  37. +.+..+++...++.+.+++++++..
  38. ........+....++.+...+.+..
  39. +++++++......++++.+.+.+++
  40. +.....+....+...++...++.+.
  41. +.+++.+.+.+...+++++++++..
  42. +.+++.+.++...++...+.++..+
  43. +.+++.+.++.+++++..++.+..+
  44. +.....+..+++..++.+.++...+
  45. +++++++....+..+.+..+..+++`,
  46. },
  47. }
  48. func Test_GetUnknownEncoder(t *testing.T) {
  49. if unknownEncoding.getEncoder() != nil {
  50. t.Fail()
  51. }
  52. }
  53. func Test_EncodingStringer(t *testing.T) {
  54. tests := map[Encoding]string{
  55. Auto: "Auto",
  56. Numeric: "Numeric",
  57. AlphaNumeric: "AlphaNumeric",
  58. Unicode: "Unicode",
  59. unknownEncoding: "",
  60. }
  61. for enc, str := range tests {
  62. if enc.String() != str {
  63. t.Fail()
  64. }
  65. }
  66. }
  67. func Test_InvalidEncoding(t *testing.T) {
  68. _, err := Encode("hello world", H, Numeric)
  69. if err == nil {
  70. t.Fail()
  71. }
  72. }
  73. func imgStrToBools(str string) []bool {
  74. res := make([]bool, 0, len(str))
  75. for _, r := range str {
  76. if r == '+' {
  77. res = append(res, true)
  78. } else if r == '.' {
  79. res = append(res, false)
  80. }
  81. }
  82. return res
  83. }
  84. func Test_Encode(t *testing.T) {
  85. for _, tst := range tests {
  86. res, err := Encode(tst.Text, tst.ECL, tst.Mode)
  87. if err != nil {
  88. t.Error(err)
  89. }
  90. qrCode, ok := res.(*qrcode)
  91. if !ok {
  92. t.Fail()
  93. }
  94. testRes := imgStrToBools(tst.Result)
  95. if (qrCode.dimension * qrCode.dimension) != len(testRes) {
  96. t.Fail()
  97. }
  98. t.Logf("dim %d", qrCode.dimension)
  99. for i := 0; i < len(testRes); i++ {
  100. x := i % qrCode.dimension
  101. y := i / qrCode.dimension
  102. if qrCode.Get(x, y) != testRes[i] {
  103. t.Errorf("Failed at index %d", i)
  104. }
  105. }
  106. }
  107. }
  108. func ExampleEncode() {
  109. f, _ := os.Create("qrcode.png")
  110. defer f.Close()
  111. qrcode, err := Encode("hello world", L, Auto)
  112. if err != nil {
  113. fmt.Println(err)
  114. } else {
  115. qrcode, err = barcode.Scale(qrcode, 100, 100)
  116. if err != nil {
  117. fmt.Println(err)
  118. } else {
  119. png.Encode(f, qrcode)
  120. }
  121. }
  122. }