json tests and fixes
This commit is contained in:
parent
ac5ccaa964
commit
2d6ea6a9ec
|
@ -53,55 +53,6 @@ type PacketDef struct {
|
|||
// we need to generate bitfield types.
|
||||
// constants for packet IDs or a map.
|
||||
|
||||
|
||||
var test = `
|
||||
packets:
|
||||
- name: dashboard_pedal_percentages
|
||||
description: ADC values from the brake and accelerator pedals.
|
||||
id: 0x290
|
||||
endian: little
|
||||
frequency: 10
|
||||
data:
|
||||
- name: reason1
|
||||
type: bitfield
|
||||
bits:
|
||||
- name: OVERVOLT
|
||||
- name: UNDERVOLT
|
||||
- name: OVERTEMP
|
||||
- name: TEMP_DISCONNECT
|
||||
- name: COMM_FAIL
|
||||
- name: reason2
|
||||
type: bitfield
|
||||
bits:
|
||||
- name: HARDWARE
|
||||
- name: KILL_PACKET
|
||||
- name: UKNOWN
|
||||
- name: OVERCURRENT
|
||||
- name: PRECHARGE_FAIL
|
||||
- name: AUX_OVER_UNDER
|
||||
- name: module
|
||||
type: uint16_t
|
||||
- name: value
|
||||
type: float
|
||||
- name: bms_module
|
||||
description: Voltage and temperature for a single module
|
||||
id: 0x01C
|
||||
endian: little
|
||||
repeat: 36
|
||||
offset: 1
|
||||
frequency: 2
|
||||
data:
|
||||
- name: voltage
|
||||
type: float
|
||||
units: V
|
||||
conversion: 1
|
||||
- name: temperature
|
||||
type: float
|
||||
units: C
|
||||
conversion: 1
|
||||
`
|
||||
|
||||
|
||||
var typeMap = map[string]string{
|
||||
"uint16_t": "uint16",
|
||||
"uint32_t": "uint32",
|
||||
|
@ -381,14 +332,28 @@ func main() {
|
|||
}
|
||||
|
||||
f, err := os.Create("skylab_gen.go")
|
||||
defer f.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = tmpl.Execute(f, v)
|
||||
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
tests := tmpl.Lookup("golang_tests.go.tmpl")
|
||||
if tests == nil {
|
||||
panic("tests not found")
|
||||
}
|
||||
|
||||
testF, err := os.Create("skylab_gen_test.go")
|
||||
defer f.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
tests.Execute(testF, v)
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -145,13 +145,13 @@ func FromJson (raw []byte) (Packet, error) {
|
|||
{{- range $p := .Packets }}
|
||||
{{- if $p.Repeat }}
|
||||
case {{ Nx (int $p.Id) $p.Repeat $p.Offset | mapf "0x%X" | strJoin ", " -}}:
|
||||
var res *{{camelCase $p.Name true}}
|
||||
var res = &{{camelCase $p.Name true}}{}
|
||||
err := json.Unmarshal(jp.Data, res)
|
||||
res.Idx = jp.Id - {{ $p.Id | printf "0x%X" }}
|
||||
return res, err
|
||||
{{- else }}
|
||||
case {{ $p.Id | printf "0x%X" }}:
|
||||
var res *{{camelCase $p.Name true}}
|
||||
var res = &{{camelCase $p.Name true}}{}
|
||||
err := json.Unmarshal(jp.Data, res)
|
||||
return res, err
|
||||
{{- end }}
|
||||
|
|
51
skylab/templates/golang_tests.go.tmpl
Normal file
51
skylab/templates/golang_tests.go.tmpl
Normal file
|
@ -0,0 +1,51 @@
|
|||
|
||||
package skylab
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
{{ range .Packets }}
|
||||
{{- $structName := camelCase .Name true}}
|
||||
func TestMarshalUnmarshal{{$structName}}(t *testing.T) {
|
||||
v := &{{$structName}}{}
|
||||
bin, err := v.MarshalPacket()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = v.UnmarshalPacket(bin)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestJSON{{$structName}}(t *testing.T) {
|
||||
|
||||
v := &{{$structName}}{}
|
||||
jp, err := ToJson(v)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
rawData, err := json.Marshal(jp)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
p, err := FromJson(rawData)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
switch underlying := p.(type) {
|
||||
case *{{$structName}}:
|
||||
break
|
||||
default:
|
||||
t.Fatalf("didn't match type: %T, %v", underlying, underlying)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
{{- end }}
|
Loading…
Reference in a new issue