mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 19:06:18 +01:00 
			
		
		
		
	Refactor INI package (first step) (#25024)
The INI package has many bugs and quirks, and in fact it is unmaintained. This PR is the first step for the INI package refactoring: * Use Gitea's "config_provider" to provide INI access * Deprecate the INI package by golangci.yml rule
This commit is contained in:
		| @@ -4,6 +4,7 @@ | ||||
| package setting | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| @@ -64,3 +65,57 @@ key = 123 | ||||
| 	assert.Equal(t, "", ConfigSectionKeyString(sec, "empty")) | ||||
| 	assert.Equal(t, "def", ConfigSectionKeyString(secSub, "empty")) | ||||
| } | ||||
|  | ||||
| func TestNewConfigProviderFromFile(t *testing.T) { | ||||
| 	_, err := NewConfigProviderFromFile(&Options{CustomConf: "no-such.ini", AllowEmpty: false}) | ||||
| 	assert.ErrorContains(t, err, "unable to find configuration file") | ||||
|  | ||||
| 	// load non-existing file and save | ||||
| 	testFile := t.TempDir() + "/test.ini" | ||||
| 	testFile1 := t.TempDir() + "/test1.ini" | ||||
| 	cfg, err := NewConfigProviderFromFile(&Options{CustomConf: testFile, AllowEmpty: true}) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| 	sec, _ := cfg.NewSection("foo") | ||||
| 	_, _ = sec.NewKey("k1", "a") | ||||
| 	assert.NoError(t, cfg.Save()) | ||||
| 	_, _ = sec.NewKey("k2", "b") | ||||
| 	assert.NoError(t, cfg.SaveTo(testFile1)) | ||||
|  | ||||
| 	bs, err := os.ReadFile(testFile) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "[foo]\nk1=a\n", string(bs)) | ||||
|  | ||||
| 	bs, err = os.ReadFile(testFile1) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "[foo]\nk1=a\nk2=b\n", string(bs)) | ||||
|  | ||||
| 	// load existing file and save | ||||
| 	cfg, err = NewConfigProviderFromFile(&Options{CustomConf: testFile, AllowEmpty: true}) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "a", cfg.Section("foo").Key("k1").String()) | ||||
| 	sec, _ = cfg.NewSection("bar") | ||||
| 	_, _ = sec.NewKey("k1", "b") | ||||
| 	assert.NoError(t, cfg.Save()) | ||||
| 	bs, err = os.ReadFile(testFile) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "[foo]\nk1=a\n\n[bar]\nk1=b\n", string(bs)) | ||||
| } | ||||
|  | ||||
| func TestNewConfigProviderForLocale(t *testing.T) { | ||||
| 	// load locale from file | ||||
| 	localeFile := t.TempDir() + "/locale.ini" | ||||
| 	_ = os.WriteFile(localeFile, []byte(`k1=a`), 0o644) | ||||
| 	cfg, err := NewConfigProviderForLocale(localeFile) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "a", cfg.Section("").Key("k1").String()) | ||||
|  | ||||
| 	// load locale from bytes | ||||
| 	cfg, err = NewConfigProviderForLocale([]byte("k1=foo\nk2=bar")) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "foo", cfg.Section("").Key("k1").String()) | ||||
| 	cfg, err = NewConfigProviderForLocale([]byte("k1=foo\nk2=bar"), []byte("k2=xxx")) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "foo", cfg.Section("").Key("k1").String()) | ||||
| 	assert.Equal(t, "xxx", cfg.Section("").Key("k2").String()) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user