205 lines
4.6 KiB
Go
205 lines
4.6 KiB
Go
// Copyright (c) quickfixengine.org All rights reserved.
|
|
//
|
|
// This file may be distributed under the terms of the quickfixengine.org
|
|
// license as defined by quickfixengine.org and appearing in the file
|
|
// LICENSE included in the packaging of this file.
|
|
//
|
|
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
|
|
// THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// See http://www.quickfixengine.org/LICENSE for licensing information.
|
|
//
|
|
// Contact ask@quickfixengine.org if any conditions of this licensing
|
|
// are not clear to you.
|
|
|
|
package quickfix
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFieldMap_Clear(t *testing.T) {
|
|
var fMap FieldMap
|
|
fMap.init()
|
|
|
|
fMap.SetField(1, FIXString("hello"))
|
|
fMap.SetField(2, FIXString("world"))
|
|
|
|
fMap.Clear()
|
|
|
|
if fMap.Has(1) || fMap.Has(2) {
|
|
t.Error("All fields should be cleared")
|
|
}
|
|
}
|
|
|
|
func TestFieldMap_SetAndGet(t *testing.T) {
|
|
var fMap FieldMap
|
|
fMap.init()
|
|
|
|
fMap.SetField(1, FIXString("hello"))
|
|
fMap.SetField(2, FIXString("world"))
|
|
|
|
var testCases = []struct {
|
|
tag Tag
|
|
expectErr bool
|
|
expectValue string
|
|
}{
|
|
{tag: 1, expectValue: "hello"},
|
|
{tag: 2, expectValue: "world"},
|
|
{tag: 44, expectErr: true},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
var testField FIXString
|
|
err := fMap.GetField(tc.tag, &testField)
|
|
|
|
if tc.expectErr {
|
|
assert.NotNil(t, err, "Expected Error")
|
|
continue
|
|
}
|
|
|
|
assert.Nil(t, err, "Unexpected error")
|
|
assert.Equal(t, tc.expectValue, string(testField))
|
|
}
|
|
}
|
|
|
|
func TestFieldMap_Length(t *testing.T) {
|
|
var fMap FieldMap
|
|
fMap.init()
|
|
fMap.SetField(1, FIXString("hello"))
|
|
fMap.SetField(2, FIXString("world"))
|
|
fMap.SetField(8, FIXString("FIX.4.4"))
|
|
fMap.SetField(9, FIXInt(100))
|
|
fMap.SetField(10, FIXString("100"))
|
|
assert.Equal(t, 16, fMap.length(), "Length should include all fields but beginString, bodyLength, and checkSum")
|
|
}
|
|
|
|
func TestFieldMap_Total(t *testing.T) {
|
|
|
|
var fMap FieldMap
|
|
fMap.init()
|
|
fMap.SetField(1, FIXString("hello"))
|
|
fMap.SetField(2, FIXString("world"))
|
|
fMap.SetField(8, FIXString("FIX.4.4"))
|
|
fMap.SetField(Tag(9), FIXInt(100))
|
|
fMap.SetField(10, FIXString("100"))
|
|
|
|
assert.Equal(t, 2116, fMap.total(), "Total should includes all fields but checkSum")
|
|
}
|
|
|
|
func TestFieldMap_TypedSetAndGet(t *testing.T) {
|
|
var fMap FieldMap
|
|
fMap.init()
|
|
|
|
fMap.SetString(1, "hello")
|
|
fMap.SetInt(2, 256)
|
|
|
|
s, err := fMap.GetString(1)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "hello", s)
|
|
|
|
i, err := fMap.GetInt(2)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 256, i)
|
|
|
|
_, err = fMap.GetInt(1)
|
|
assert.NotNil(t, err, "Type mismatch should occur error")
|
|
|
|
s, err = fMap.GetString(2)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "256", s)
|
|
|
|
b, err := fMap.GetBytes(1)
|
|
assert.Nil(t, err)
|
|
assert.True(t, bytes.Equal([]byte("hello"), b))
|
|
}
|
|
|
|
func TestFieldMap_BoolTypedSetAndGet(t *testing.T) {
|
|
var fMap FieldMap
|
|
fMap.init()
|
|
|
|
fMap.SetBool(1, true)
|
|
v, err := fMap.GetBool(1)
|
|
assert.Nil(t, err)
|
|
assert.True(t, v)
|
|
|
|
s, err := fMap.GetString(1)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "Y", s)
|
|
|
|
fMap.SetBool(2, false)
|
|
v, err = fMap.GetBool(2)
|
|
assert.Nil(t, err)
|
|
assert.False(t, v)
|
|
|
|
s, err = fMap.GetString(2)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "N", s)
|
|
}
|
|
|
|
func TestFieldMap_CopyInto(t *testing.T) {
|
|
var fMapA FieldMap
|
|
fMapA.initWithOrdering(headerFieldOrdering)
|
|
fMapA.SetString(9, "length")
|
|
fMapA.SetString(8, "begin")
|
|
fMapA.SetString(35, "msgtype")
|
|
fMapA.SetString(1, "a")
|
|
assert.Equal(t, []Tag{8, 9, 35, 1}, fMapA.sortedTags())
|
|
|
|
var fMapB FieldMap
|
|
fMapB.init()
|
|
fMapB.SetString(1, "A")
|
|
fMapB.SetString(3, "C")
|
|
fMapB.SetString(4, "D")
|
|
assert.Equal(t, fMapB.sortedTags(), []Tag{1, 3, 4})
|
|
|
|
fMapA.CopyInto(&fMapB)
|
|
|
|
assert.Equal(t, []Tag{8, 9, 35, 1}, fMapB.sortedTags())
|
|
|
|
// new fields
|
|
s, err := fMapB.GetString(35)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "msgtype", s)
|
|
|
|
// existing fields overwritten
|
|
s, err = fMapB.GetString(1)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "a", s)
|
|
|
|
// old fields cleared
|
|
_, err = fMapB.GetString(3)
|
|
assert.NotNil(t, err)
|
|
|
|
// check that ordering is overwritten
|
|
fMapB.SetString(2, "B")
|
|
assert.Equal(t, []Tag{8, 9, 35, 1, 2}, fMapB.sortedTags())
|
|
|
|
// updating the existing map doesn't affect the new
|
|
fMapA.init()
|
|
fMapA.SetString(1, "AA")
|
|
s, err = fMapB.GetString(1)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "a", s)
|
|
fMapA.Clear()
|
|
s, err = fMapB.GetString(1)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "a", s)
|
|
}
|
|
|
|
func TestFieldMap_Remove(t *testing.T) {
|
|
var fMap FieldMap
|
|
fMap.init()
|
|
|
|
fMap.SetField(1, FIXString("hello"))
|
|
fMap.SetField(2, FIXString("world"))
|
|
|
|
fMap.Remove(1)
|
|
assert.False(t, fMap.Has(1))
|
|
assert.True(t, fMap.Has(2))
|
|
}
|