git.sr.ht/~pingoo/stdx@v0.0.0-20240218134121-094174641f6e/barcode/qr/encoder_test.go (about)

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