-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathaixm_test.go
102 lines (83 loc) · 3.04 KB
/
aixm_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package aixm_test
import (
"archive/zip"
"encoding/xml"
"os"
"path/filepath"
"testing"
"github.com/alecthomas/assert/v2"
"github.com/twpayne/go-xmlstruct"
"github.com/twpayne/go-xmlstruct/internal/tests/aixm"
)
func TestAIXM(t *testing.T) {
t.Parallel()
generator := xmlstruct.NewGenerator(
xmlstruct.WithExportRenames(map[string]string{
"aipClassifier": "AIPClassifier", // Capitalize AIP abbreviation.
"cae": "CAE", // Capitalize CAE abbreviation.
"note": "NoteLower", // Disambiguate between Note and note.
"runwayDirection": "RunwayDirectionLower", // Disambiguate between RunwayDirection and runwayDirection.
"srsName": "SRSName", // Capitalize SRS abbreviation.
"uom": "UOM", // Capitalize unit of measurement abbreviation.
}),
xmlstruct.WithNamedTypes(true),
xmlstruct.WithPackageName("aixm"),
)
filenames := []string{
"testdata/LF_AIP_DS_PartOf_20201203_AIRAC.zip",
"testdata/LO_OBS_DS_AREA1_20221104_2022-10-25_1010984.zip",
"testdata/Obstacles.aixm5.xml.zip",
}
observeZipFile := func(zipFile *zip.File) {
readCloser, err := zipFile.Open()
assert.NoError(t, err)
defer readCloser.Close()
assert.NoError(t, generator.ObserveReader(readCloser))
}
observeZipReader := func(zipReader *zip.Reader) {
for _, zipFile := range zipReader.File {
if filepath.Ext(zipFile.Name) == ".xml" {
observeZipFile(zipFile)
}
}
}
zipReaders := make([]*zip.Reader, 0, len(filenames))
for _, filename := range filenames {
file, err := os.Open(filename)
assert.NoError(t, err)
defer file.Close()
fileInfo, err := file.Stat()
assert.NoError(t, err)
zipReader, err := zip.NewReader(file, fileInfo.Size())
assert.NoError(t, err)
observeZipReader(zipReader)
zipReaders = append(zipReaders, zipReader)
}
actualSource, err := generator.Generate()
assert.NoError(t, err)
assert.NoError(t, os.WriteFile("aixm.gen.go.actual", actualSource, 0o666))
expectedSource, err := os.ReadFile("aixm.gen.go")
assert.NoError(t, err)
assert.Equal(t, string(expectedSource), string(actualSource))
decodeZipFile := func(zipFile *zip.File) *aixm.AIXMBasicMessage {
readCloser, err := zipFile.Open()
assert.NoError(t, err)
defer readCloser.Close()
var aixmBasicMessage aixm.AIXMBasicMessage
assert.NoError(t, xml.NewDecoder(readCloser).Decode(&aixmBasicMessage))
return &aixmBasicMessage
}
for _, zipReader := range zipReaders {
for _, zipFile := range zipReader.File {
if filepath.Ext(zipFile.Name) == ".xml" {
aixmBasicMessage := decodeZipFile(zipFile)
switch zipFile.Name {
case "LO_OBS_DS_AREA1_20221104.xml":
assert.Equal(t, "https://sdimd-free.austrocontrol.at/geonetwork/srv/metadata/b0d38a5a-2072-42fc-8402-4ce984db8fae", aixmBasicMessage.MessageMetadata.MDMetadata.DataSetURI.CharacterString)
case "LF_AIP_DS_PartOf_20201203_AIRAC.xml":
assert.Equal(t, "uuid.729920d4-5360-49e3-b4b2-1a28313261ba", aixmBasicMessage.HasMember[0].AirportHeliport.ID)
}
}
}
}
}