adding quickfix
This commit is contained in:
204
quickfix/field_map_test.go
Normal file
204
quickfix/field_map_test.go
Normal file
@ -0,0 +1,204 @@
|
||||
// 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))
|
||||
}
|
||||
Reference in New Issue
Block a user