1// Copyright 2014-2017 Ulrich Kunitz. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package lzma 6 7import ( 8 "bufio" 9 "io" 10 "io/ioutil" 11 "os" 12 "testing" 13) 14 15func TestDecoder(t *testing.T) { 16 filename := "fox.lzma" 17 want := "The quick brown fox jumps over the lazy dog.\n" 18 for i := 0; i < 2; i++ { 19 f, err := os.Open(filename) 20 if err != nil { 21 t.Fatalf("os.Open(%q) error %s", filename, err) 22 } 23 p := make([]byte, 13) 24 _, err = io.ReadFull(f, p) 25 if err != nil { 26 t.Fatalf("io.ReadFull error %s", err) 27 } 28 props, err := PropertiesForCode(p[0]) 29 if err != nil { 30 t.Fatalf("p[0] error %s", err) 31 } 32 state := newState(props) 33 const capacity = 0x800000 34 dict, err := newDecoderDict(capacity) 35 if err != nil { 36 t.Fatalf("newDecoderDict: error %s", err) 37 } 38 size := int64(-1) 39 if i > 0 { 40 size = int64(len(want)) 41 } 42 br := bufio.NewReader(f) 43 r, err := newDecoder(br, state, dict, size) 44 if err != nil { 45 t.Fatalf("newDecoder error %s", err) 46 } 47 bytes, err := ioutil.ReadAll(r) 48 if err != nil { 49 t.Fatalf("[%d] ReadAll error %s", i, err) 50 } 51 if err = f.Close(); err != nil { 52 t.Fatalf("Close error %s", err) 53 } 54 got := string(bytes) 55 if got != want { 56 t.Fatalf("read %q; but want %q", got, want) 57 } 58 } 59} 60