mirror of https://bitbucket.org/ausocean/av.git
234 lines
4.7 KiB
Go
234 lines
4.7 KiB
Go
/*
|
|
NAME
|
|
descriptor_test.go
|
|
|
|
DESCRIPTION
|
|
See Readme.md
|
|
|
|
AUTHOR
|
|
Saxon Nelson-Milton <saxon@ausocean.org>
|
|
|
|
LICENSE
|
|
descriptor_test.go is Copyright (C) 2017-2019 the Australian Ocean Lab (AusOcean)
|
|
|
|
It is free software: you can redistribute it and/or modify them
|
|
under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation, either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
It is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with revid in gpl.txt. If not, see http://www.gnu.org/licenses.
|
|
*/
|
|
|
|
package psi
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
errNotExpectedOut = "Did not get expected output: \ngot : %v, \nwant: %v"
|
|
errUnexpectedErr = "Unexpected error: %v\n"
|
|
)
|
|
|
|
var (
|
|
tstPsi1 = PSI{
|
|
Pf: 0x00,
|
|
Tid: 0x02,
|
|
Ssi: true,
|
|
Sl: 0x1c,
|
|
Tss: &TSS{
|
|
Tide: 0x01,
|
|
V: 0,
|
|
Cni: true,
|
|
Sn: 0,
|
|
Lsn: 0,
|
|
Sd: &PMT{
|
|
Pcrpid: 0x0100, // wrong
|
|
Pil: 10,
|
|
Pd: []Desc{
|
|
{
|
|
Dt: TimeDescTag,
|
|
Dl: TimeDataSize,
|
|
Dd: make([]byte, TimeDataSize),
|
|
},
|
|
},
|
|
Essd: &ESSD{
|
|
St: 0x1b,
|
|
Epid: 0x0100,
|
|
Esil: 0x00,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
tstPsi2 = PSI{
|
|
Pf: 0x00,
|
|
Tid: 0x02,
|
|
Ssi: true,
|
|
Sl: 0x12,
|
|
Tss: &TSS{
|
|
Tide: 0x01,
|
|
V: 0,
|
|
Cni: true,
|
|
Sn: 0,
|
|
Lsn: 0,
|
|
Sd: &PMT{
|
|
Pcrpid: 0x0100,
|
|
Pil: 0,
|
|
Essd: &ESSD{
|
|
St: 0x1b,
|
|
Epid: 0x0100,
|
|
Esil: 0x00,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
tstPsi3 = PSI{
|
|
Pf: 0x00,
|
|
Tid: 0x02,
|
|
Ssi: true,
|
|
Sl: 0x3e,
|
|
Tss: &TSS{
|
|
Tide: 0x01,
|
|
V: 0,
|
|
Cni: true,
|
|
Sn: 0,
|
|
Lsn: 0,
|
|
Sd: &PMT{
|
|
Pcrpid: 0x0100,
|
|
Pil: PmtTimeLocationPil,
|
|
Pd: []Desc{
|
|
{
|
|
Dt: TimeDescTag,
|
|
Dl: TimeDataSize,
|
|
Dd: make([]byte, TimeDataSize),
|
|
},
|
|
{
|
|
Dt: LocationDescTag,
|
|
Dl: LocationDataSize,
|
|
Dd: make([]byte, LocationDataSize),
|
|
},
|
|
},
|
|
Essd: &ESSD{
|
|
St: 0x1b,
|
|
Epid: 0x0100,
|
|
Esil: 0x00,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
)
|
|
|
|
func TestHasDescriptorExists(t *testing.T) {
|
|
p := PSIBytes(tstPsi3.Bytes())
|
|
_, got := p.HasDescriptor(LocationDescTag)
|
|
want := []byte{
|
|
LocationDescTag,
|
|
LocationDataSize,
|
|
}
|
|
want = append(want, make([]byte, LocationDataSize)...)
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestHasDescriptorAbsent(t *testing.T) {
|
|
p := PSIBytes(tstPsi3.Bytes())
|
|
const fakeTag = 236
|
|
_, got := p.HasDescriptor(fakeTag)
|
|
var want []byte
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestHasDescriptorNone(t *testing.T) {
|
|
p := PSIBytes(tstPsi2.Bytes())
|
|
_, got := p.HasDescriptor(LocationDescTag)
|
|
var want []byte
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestProgramInfoLen(t *testing.T) {
|
|
p := PSIBytes(tstPsi1.Bytes())
|
|
got := p.ProgramInfoLen()
|
|
want := 10
|
|
if got != want {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestDescriptors(t *testing.T) {
|
|
p := PSIBytes(tstPsi1.Bytes())
|
|
got := p.descriptors()
|
|
want := []byte{
|
|
TimeDescTag,
|
|
TimeDataSize,
|
|
}
|
|
want = append(want, make([]byte, TimeDataSize)...)
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestDescriptorsNone(t *testing.T) {
|
|
p := PSIBytes(tstPsi2.Bytes())
|
|
got := p.descriptors()
|
|
var want []byte
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestCreateDescriptorEmpty(t *testing.T) {
|
|
got := PSIBytes(tstPsi2.Bytes())
|
|
got.createDescriptor(TimeDescTag, make([]byte, TimeDataSize))
|
|
updateCrc(got[1:])
|
|
want := PSIBytes(tstPsi1.Bytes())
|
|
if !bytes.Equal(want, got) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestCreateDescriptorNotEmpty(t *testing.T) {
|
|
got := PSIBytes(tstPsi1.Bytes())
|
|
got.createDescriptor(LocationDescTag, make([]byte, LocationDataSize))
|
|
updateCrc(got[1:])
|
|
want := PSIBytes(tstPsi3.Bytes())
|
|
if !bytes.Equal(want, got) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestAddDescriptorEmpty(t *testing.T) {
|
|
got := PSIBytes(tstPsi2.Bytes())
|
|
if err := got.AddDescriptor(TimeDescTag, make([]byte, TimeDataSize)); err != nil {
|
|
t.Errorf(errUnexpectedErr, err.Error())
|
|
}
|
|
want := PSIBytes(tstPsi1.Bytes())
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|
|
|
|
func TestAddDescriptorNonEmpty(t *testing.T) {
|
|
got := PSIBytes(tstPsi1.Bytes())
|
|
if err := got.AddDescriptor(LocationDescTag, make([]byte, LocationDataSize)); err != nil {
|
|
t.Errorf(errUnexpectedErr, err.Error())
|
|
}
|
|
want := PSIBytes(tstPsi3.Bytes())
|
|
if !bytes.Equal(got, want) {
|
|
t.Errorf(errNotExpectedOut, got, want)
|
|
}
|
|
}
|