func (cfg *config) init() *app.OptionsError { if !version.SemVerValid(cfg.Version) { return &app.OptionsError{Field: "version", Message: locale.Sprintf(locale.ErrInvalidFormat)} } if len(cfg.Inputs) == 0 { return &app.OptionsError{Field: "inputs", Message: locale.Sprintf(locale.ErrRequired)} } if cfg.Output == nil { return &app.OptionsError{Field: "output", Message: locale.Sprintf(locale.ErrRequired)} } for i, opt := range cfg.Inputs { if err := opt.Init(); err != nil { index := strconv.Itoa(i) err.Field = "inputs[" + index + "]." + err.Field return err } opt.SyntaxLog = erro // 语法错误输出到 erro 中 } if err := cfg.Output.Init(); err != nil { err.Field = "outputs." + err.Field return err } return nil }
// 对一些堂量的基本检测。 func TestConsts(t *testing.T) { a := assert.New(t) a.True(is.URL(RepoURL)) a.True(is.URL(OfficialURL)) a.True(version.SemVerValid(Version)) }
// 对一些堂量的基本检测。 func TestConsts(t *testing.T) { a := assert.New(t) a.True(version.SemVerValid(Version)) a.True(len(Name) > 0) a.True(is.URL(RepoURL)) a.True(is.URL(OfficialURL)) a.True(len(ConfigFilename) > 0).True(strings.IndexAny(ConfigFilename, "/\\") < 0) a.True(len(DefaultTitle) > 0) a.True(len(DefaultGroupName) > 0).True(strings.IndexAny(DefaultGroupName, "/\\") < 0) a.True(len(Profile) > 0).True(strings.IndexAny(Profile, "/\\") < 0) tag, err := language.Parse(DefaultLocale) a.NotError(err).NotEqual(tag, language.Und) }
// 加载 path 所指的文件内容到 *config 实例。 func loadConfig(path string) (*config, error) { data, err := ioutil.ReadFile(path) if err != nil { return nil, err } cfg := &config{} if err = json.Unmarshal(data, cfg); err != nil { return nil, err } if !version.SemVerValid(cfg.Version) { return nil, &app.OptionsError{Field: "version", Message: "格式不正确"} } if len(cfg.Inputs) == 0 { return nil, &app.OptionsError{Field: "inputs", Message: "不能为空"} } if cfg.Output == nil { return nil, &app.OptionsError{Field: "output", Message: "不能为空"} } l := log.New(&syntaxWriter{}, "", 0) for i, opt := range cfg.Inputs { index := strconv.Itoa(i) if err := opt.Init(); err != nil { err.Field = "inputs[" + index + "]." + err.Field return nil, err } opt.SyntaxLog = l } if err := cfg.Output.Init(); err != nil { err.Field = "outputs." + err.Field return nil, err } return cfg, nil }