| package config |
| |
| import ( |
| "path/filepath" |
| "testing" |
| "time" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/testutils" |
| "go.skia.org/infra/go/testutils/unittest" |
| ) |
| |
| type testCommonConfig struct { |
| CommonString string `json:"common_str"` |
| CommonInt int `json:"common_int"` |
| CommonBool bool `json:"common_bool"` |
| WillBeOverridden string `json:"will_be_overridden"` |
| } |
| |
| type testSpecificConfig struct { |
| testCommonConfig |
| Unique string `json:"unique"` |
| |
| OptionalDuration Duration `json:"optional_duration" optional:"true"` |
| } |
| |
| func TestLoadFromJSON5_Success(t *testing.T) { |
| unittest.MediumTest(t) |
| |
| td := testutils.TestDataDir(t) |
| commonPath := filepath.Join(td, "common.json5") |
| specificPath := filepath.Join(td, "specific.json5") |
| |
| var tsc testSpecificConfig |
| err := LoadFromJSON5(&tsc, &commonPath, &specificPath) |
| require.NoError(t, err) |
| |
| assert.Equal(t, testSpecificConfig{ |
| testCommonConfig: testCommonConfig{ |
| CommonString: "somestring", |
| CommonInt: 1234, |
| CommonBool: false, |
| WillBeOverridden: "7890", |
| }, |
| Unique: "1234", |
| }, tsc) |
| } |
| |
| func TestLoadFromJSON5_WithDuration_Success(t *testing.T) { |
| unittest.MediumTest(t) |
| |
| td := testutils.TestDataDir(t) |
| commonPath := filepath.Join(td, "common.json5") |
| specificPath := filepath.Join(td, "specific_duration.json5") |
| |
| var tsc testSpecificConfig |
| err := LoadFromJSON5(&tsc, &commonPath, &specificPath) |
| require.NoError(t, err) |
| |
| assert.Equal(t, testSpecificConfig{ |
| testCommonConfig: testCommonConfig{ |
| CommonString: "somestring", |
| CommonInt: 1234, |
| CommonBool: false, |
| WillBeOverridden: "7890", |
| }, |
| Unique: "1234", |
| OptionalDuration: Duration{Duration: 3 * time.Hour}, |
| }, tsc) |
| } |
| |
| func TestLoadFromJSON5_RequiredFieldMissing_Error(t *testing.T) { |
| unittest.MediumTest(t) |
| |
| td := testutils.TestDataDir(t) |
| commonPath := filepath.Join(td, "common_missing_field.json5") |
| specificPath := filepath.Join(td, "specific.json5") |
| |
| var tsc testSpecificConfig |
| err := LoadFromJSON5(&tsc, &commonPath, &specificPath) |
| require.Error(t, err) |
| assert.Contains(t, err.Error(), "CommonInt") |
| } |