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

     1  package datamatrix
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  )
     7  
     8  func codeFromStr(str string, size *dmCodeSize) *datamatrixCode {
     9  	code := newDataMatrixCode(size)
    10  	idx := 0
    11  	for _, r := range str {
    12  		x := idx % size.Columns
    13  		y := idx / size.Columns
    14  
    15  		switch r {
    16  		case '#':
    17  			code.set(x, y, true)
    18  		case '.':
    19  			code.set(x, y, false)
    20  		default:
    21  			continue
    22  		}
    23  
    24  		idx++
    25  	}
    26  	return code
    27  }
    28  
    29  func Test_Issue12(t *testing.T) {
    30  	data := `{"po":12,"batchAction":"start_end"}`
    31  	realData := addPadding(encodeText(data), 36)
    32  	wantedData := []byte{124, 35, 113, 112, 35, 59, 142, 45, 35, 99, 98, 117, 100, 105, 66, 100, 117, 106, 112, 111, 35, 59, 35, 116, 117, 98, 115, 117, 96, 102, 111, 101, 35, 126, 129, 181}
    33  
    34  	if bytes.Compare(realData, wantedData) != 0 {
    35  		t.Error("Data Encoding failed")
    36  		return
    37  	}
    38  
    39  	var codeSize *dmCodeSize
    40  	for _, s := range codeSizes {
    41  		if s.DataCodewords() >= len(wantedData) {
    42  			codeSize = s
    43  			break
    44  		}
    45  	}
    46  	realECC := ec.calcECC(realData, codeSize)[len(realData):]
    47  	wantedECC := []byte{196, 53, 147, 192, 151, 213, 107, 61, 98, 251, 50, 71, 186, 15, 43, 111, 165, 243, 209, 79, 128, 109, 251, 4}
    48  	if bytes.Compare(realECC, wantedECC) != 0 {
    49  		t.Errorf("Error correction calculation failed\nGot: %v", realECC)
    50  		return
    51  	}
    52  
    53  	barcode := `
    54  #.#.#.#.#.#.#.#.#.#.#.#.
    55  #....###..#..#....#...##
    56  ##.......#...#.#.#....#.
    57  #.###...##..#...##.##..#
    58  ##...####..##..#.#.#.##.
    59  #.###.##.###..#######.##
    60  #..###...##.##..#.##.##.
    61  #.#.#.#.#.#.###....#.#.#
    62  ##.#...#.#.#..#...#####.
    63  #...####..#...##..#.#..#
    64  ##...#...##.###.#.....#.
    65  #.###.#.##.#.....###..##
    66  ##..#####...#..##...###.
    67  ###...#.####.##.#.#.#..#
    68  #..###..#.#.####.#.###..
    69  ###.#.#..#..#.###.#.##.#
    70  #####.##.###..#.####.#..
    71  #.##.#......#.#..#.#.###
    72  ###.#....######.#...##..
    73  ##...#..##.###..#...####
    74  #.######.###.##..#...##.
    75  #..#..#.##.#..####...#.#
    76  ###.###..#..##.#.##...#.
    77  ########################`
    78  
    79  	bc, err := Encode(data)
    80  
    81  	if err != nil {
    82  		t.Error(err)
    83  		return
    84  	}
    85  	realResult := bc.(*datamatrixCode)
    86  	if realResult.Columns != 24 || realResult.Rows != 24 {
    87  		t.Errorf("Got wrong barcode size %dx%d", realResult.Columns, realResult.Rows)
    88  		return
    89  	}
    90  
    91  	wantedResult := codeFromStr(barcode, realResult.dmCodeSize)
    92  
    93  	for x := 0; x < wantedResult.Columns; x++ {
    94  		for y := 0; y < wantedResult.Rows; y++ {
    95  			r := realResult.get(x, y)
    96  			w := wantedResult.get(x, y)
    97  			if w != r {
    98  				t.Errorf("Failed at: c%d/r%d", x, y)
    99  			}
   100  		}
   101  	}
   102  }