git.sr.ht/~pingoo/stdx@v0.0.0-20240218134121-094174641f6e/barcode/qr/qrcode_test.go (about) 1 package qr 2 3 import ( 4 "image/color" 5 "testing" 6 ) 7 8 func Test_NewQRCode(t *testing.T) { 9 bc := newBarcode(2) 10 if bc == nil { 11 t.Fail() 12 } 13 if bc.data.Len() != 4 { 14 t.Fail() 15 } 16 if bc.dimension != 2 { 17 t.Fail() 18 } 19 } 20 21 func Test_QRBasics(t *testing.T) { 22 qr := newBarcode(10) 23 if qr.ColorModel() != color.Gray16Model { 24 t.Fail() 25 } 26 code, _ := Encode("test", L, Unicode) 27 if code.Content() != "test" { 28 t.Fail() 29 } 30 if code.Metadata().Dimensions != 2 { 31 t.Fail() 32 } 33 bounds := code.Bounds() 34 if bounds.Min.X != 0 || bounds.Min.Y != 0 || bounds.Max.X != 21 || bounds.Max.Y != 21 { 35 t.Fail() 36 } 37 if code.At(0, 0) != color.Black || code.At(0, 7) != color.White { 38 t.Fail() 39 } 40 qr = code.(*qrcode) 41 if !qr.Get(0, 0) || qr.Get(0, 7) { 42 t.Fail() 43 } 44 sum := qr.calcPenaltyRule1() + qr.calcPenaltyRule2() + qr.calcPenaltyRule3() + qr.calcPenaltyRule4() 45 if qr.calcPenalty() != sum { 46 t.Fail() 47 } 48 } 49 50 func Test_Penalty1(t *testing.T) { 51 qr := newBarcode(7) 52 if qr.calcPenaltyRule1() != 70 { 53 t.Fail() 54 } 55 qr.Set(0, 0, true) 56 if qr.calcPenaltyRule1() != 68 { 57 t.Fail() 58 } 59 qr.Set(0, 6, true) 60 if qr.calcPenaltyRule1() != 66 { 61 t.Fail() 62 } 63 } 64 65 func Test_Penalty2(t *testing.T) { 66 qr := newBarcode(3) 67 if qr.calcPenaltyRule2() != 12 { 68 t.Fail() 69 } 70 qr.Set(0, 0, true) 71 qr.Set(1, 1, true) 72 qr.Set(2, 0, true) 73 if qr.calcPenaltyRule2() != 0 { 74 t.Fail() 75 } 76 qr.Set(1, 1, false) 77 if qr.calcPenaltyRule2() != 6 { 78 t.Fail() 79 } 80 } 81 82 func Test_Penalty3(t *testing.T) { 83 runTest := func(content string, result uint) { 84 code, _ := Encode(content, L, AlphaNumeric) 85 qr := code.(*qrcode) 86 if qr.calcPenaltyRule3() != result { 87 t.Errorf("Failed Penalty Rule 3 for content \"%s\" got %d but expected %d", content, qr.calcPenaltyRule3(), result) 88 } 89 } 90 runTest("A", 80) 91 runTest("FOO", 40) 92 runTest("0815", 0) 93 } 94 95 func Test_Penalty4(t *testing.T) { 96 qr := newBarcode(3) 97 if qr.calcPenaltyRule4() != 100 { 98 t.Fail() 99 } 100 qr.Set(0, 0, true) 101 if qr.calcPenaltyRule4() != 70 { 102 t.Fail() 103 } 104 qr.Set(0, 1, true) 105 if qr.calcPenaltyRule4() != 50 { 106 t.Fail() 107 } 108 qr.Set(0, 2, true) 109 if qr.calcPenaltyRule4() != 30 { 110 t.Fail() 111 } 112 qr.Set(1, 0, true) 113 if qr.calcPenaltyRule4() != 10 { 114 t.Fail() 115 } 116 qr.Set(1, 1, true) 117 if qr.calcPenaltyRule4() != 10 { 118 t.Fail() 119 } 120 qr = newBarcode(2) 121 qr.Set(0, 0, true) 122 qr.Set(1, 0, true) 123 if qr.calcPenaltyRule4() != 0 { 124 t.Fail() 125 } 126 }