diff --git a/pipeline/frontend/yaml/types/base/base_types_test.go b/pipeline/frontend/yaml/types/base/base_types_test.go deleted file mode 100644 index 676be9fafc..0000000000 --- a/pipeline/frontend/yaml/types/base/base_types_test.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2023 Woodpecker Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package base - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/yaml.v3" -) - -type StructStringorInt struct { - Foo StringOrInt -} - -func TestStringorIntYaml(t *testing.T) { - for _, str := range []string{`{foo: 10}`, `{foo: "10"}`} { - s := StructStringorInt{} - assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) - - assert.Equal(t, StringOrInt(10), s.Foo) - - d, err := yaml.Marshal(&s) - assert.NoError(t, err) - - s2 := StructStringorInt{} - assert.NoError(t, yaml.Unmarshal(d, &s2)) - - assert.Equal(t, StringOrInt(10), s2.Foo) - } -} - -type StructStringOrSlice struct { - Foo StringOrSlice -} - -func TestStringOrSliceYaml(t *testing.T) { - str := `{foo: [bar, "baz"]}` - s := StructStringOrSlice{} - assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) - assert.Equal(t, StringOrSlice{"bar", "baz"}, s.Foo) - - d, err := yaml.Marshal(&s) - assert.NoError(t, err) - - s = StructStringOrSlice{} - assert.NoError(t, yaml.Unmarshal(d, &s)) - assert.Equal(t, StringOrSlice{"bar", "baz"}, s.Foo) - - str = `{foo: []}` - s = StructStringOrSlice{} - assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) - assert.Equal(t, StringOrSlice{}, s.Foo) - - str = `{}` - s = StructStringOrSlice{} - assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) - assert.Nil(t, s.Foo) -} - -type StructSliceorMap struct { - Foos SliceOrMap `yaml:"foos,omitempty"` - Bars []string `yaml:"bars"` -} - -func TestSliceOrMapYaml(t *testing.T) { - str := `{foos: [bar=baz, far=faz]}` - - s := StructSliceorMap{} - assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) - - assert.Equal(t, SliceOrMap{"bar": "baz", "far": "faz"}, s.Foos) - - d, err := yaml.Marshal(&s) - assert.NoError(t, err) - - s2 := StructSliceorMap{} - assert.NoError(t, yaml.Unmarshal(d, &s2)) - - assert.Equal(t, SliceOrMap{"bar": "baz", "far": "faz"}, s2.Foos) -} - -var sampleStructSliceorMap = ` -foos: - io.rancher.os.bar: baz - io.rancher.os.far: true -bars: [] -` - -func TestUnmarshalSliceOrMap(t *testing.T) { - s := StructSliceorMap{} - err := yaml.Unmarshal([]byte(sampleStructSliceorMap), &s) - assert.Equal(t, fmt.Errorf("cannot unmarshal 'true' of type bool into a string value"), err) -} - -func TestStr2SliceOrMapPtrMap(t *testing.T) { - s := map[string]*StructSliceorMap{"udav": { - Foos: SliceOrMap{"io.rancher.os.bar": "baz", "io.rancher.os.far": "true"}, - Bars: []string{}, - }} - d, err := yaml.Marshal(&s) - assert.NoError(t, err) - - s2 := map[string]*StructSliceorMap{} - assert.NoError(t, yaml.Unmarshal(d, &s2)) - - assert.Equal(t, s, s2) -} diff --git a/pipeline/frontend/yaml/types/base/int_test.go b/pipeline/frontend/yaml/types/base/int_test.go new file mode 100644 index 0000000000..39b9d4202a --- /dev/null +++ b/pipeline/frontend/yaml/types/base/int_test.go @@ -0,0 +1,44 @@ +// Copyright 2024 Woodpecker Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package base + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "gopkg.in/yaml.v3" +) + +type StructStringOrInt struct { + Foo StringOrInt +} + +func TestStringOrIntYaml(t *testing.T) { + for _, str := range []string{`{foo: 10}`, `{foo: "10"}`} { + s := StructStringOrInt{} + assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) + + assert.Equal(t, StringOrInt(10), s.Foo) + + d, err := yaml.Marshal(&s) + assert.NoError(t, err) + + s2 := StructStringOrInt{} + assert.NoError(t, yaml.Unmarshal(d, &s2)) + + assert.Equal(t, StringOrInt(10), s2.Foo) + } +} + diff --git a/pipeline/frontend/yaml/types/base/map_test.go b/pipeline/frontend/yaml/types/base/map_test.go new file mode 100644 index 0000000000..750fd17140 --- /dev/null +++ b/pipeline/frontend/yaml/types/base/map_test.go @@ -0,0 +1,58 @@ +// Copyright 2024 Woodpecker Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package base + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "gopkg.in/yaml.v3" +) + +type StructSliceOrMap struct { + Foos SliceOrMap `yaml:"foos,omitempty"` + Bars []string `yaml:"bars"` +} + +func TestSliceOrMapYaml(t *testing.T) { + str := `{foos: [bar=baz, far=faz]}` + + s := StructSliceOrMap{} + assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) + + assert.Equal(t, SliceOrMap{"bar": "baz", "far": "faz"}, s.Foos) + + d, err := yaml.Marshal(&s) + assert.NoError(t, err) + + s2 := StructSliceOrMap{} + assert.NoError(t, yaml.Unmarshal(d, &s2)) + + assert.Equal(t, SliceOrMap{"bar": "baz", "far": "faz"}, s2.Foos) +} + +func TestStr2SliceOrMapPtrMap(t *testing.T) { + s := map[string]*StructSliceOrMap{"udav": { + Foos: SliceOrMap{"io.rancher.os.bar": "baz", "io.rancher.os.far": "true"}, + Bars: []string{}, + }} + d, err := yaml.Marshal(&s) + assert.NoError(t, err) + + s2 := map[string]*StructSliceOrMap{} + assert.NoError(t, yaml.Unmarshal(d, &s2)) + + assert.Equal(t, s, s2) +} diff --git a/pipeline/frontend/yaml/types/base/slice_test.go b/pipeline/frontend/yaml/types/base/slice_test.go new file mode 100644 index 0000000000..bfde6e2982 --- /dev/null +++ b/pipeline/frontend/yaml/types/base/slice_test.go @@ -0,0 +1,50 @@ +// Copyright 2024 Woodpecker Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package base + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "gopkg.in/yaml.v3" +) + +type StructStringOrSlice struct { + Foo StringOrSlice +} + +func TestStringOrSliceYaml(t *testing.T) { + str := `{foo: [bar, "baz"]}` + s := StructStringOrSlice{} + assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) + assert.Equal(t, StringOrSlice{"bar", "baz"}, s.Foo) + + d, err := yaml.Marshal(&s) + assert.NoError(t, err) + + s = StructStringOrSlice{} + assert.NoError(t, yaml.Unmarshal(d, &s)) + assert.Equal(t, StringOrSlice{"bar", "baz"}, s.Foo) + + str = `{foo: []}` + s = StructStringOrSlice{} + assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) + assert.Equal(t, StringOrSlice{}, s.Foo) + + str = `{}` + s = StructStringOrSlice{} + assert.NoError(t, yaml.Unmarshal([]byte(str), &s)) + assert.Nil(t, s.Foo) +}