package gtest import ( "log" "golang.flu0r1ne.net/planr" "strings" "github.com/BurntSushi/toml" ) type GtestDefaults struct { Name *string Suite *string Testfile *string Test_root *string Srcs *[]string Srcs_root *string } func (child *GtestDefaults) Inherit(p interface{}) { parent := p.(*GtestDefaults) if(child.Name == nil) { child.Name = parent.Name } if(child.Suite == nil) { child.Suite = parent.Suite } if(child.Testfile == nil) { child.Testfile = parent.Testfile } if(child.Test_root == nil) { child.Test_root = parent.Test_root } if(child.Srcs == nil) { child.Srcs = parent.Srcs } if(child.Srcs_root == nil) { child.Srcs_root = parent.Srcs_root } } type GtestConfig struct { GtestDefaults } func (g GtestConfig) ensureSatisfied(path string) { if g.Name == nil { log.Fatalf("\"name\" is not defined for unit: %s\n", path) } else if g.Suite == nil { log.Fatalf("\"suite\" is not defined for unit: %s\n", path) } else if g.Testfile == nil { log.Fatalf("\"testfile\" is not defined for unit: %s\n", path) } } func (cfg GtestConfig) joinTests(path_ string) string { if cfg.Test_root == nil { return planr.JoinConfigDir("tests", path_) } return planr.JoinConfigDir(*cfg.Test_root, path_) } func (cfg GtestConfig) joinSrcs(path_ string) string { if cfg.Srcs_root == nil { return planr.JoinConfigDir("../src", path_) } return planr.JoinConfigDir(*cfg.Srcs_root, path_) } func (cfg GtestConfig) srcList() string { var srcList string if cfg.Srcs != nil { srcs := make([]string, len(*cfg.Srcs)) for i, src := range *cfg.Srcs { srcs[i] = cfg.joinSrcs(src) } srcList = strings.Join(srcs, "\n ") } return srcList } func ParseConfig(prim toml.Primitive) (planr.InheritableConfig, error) { config := GtestConfig{} if err := toml.PrimitiveDecode(prim, &config); err != nil { return nil, err } return &config, nil } func ParseDefaultConfig(prim toml.Primitive) (planr.InheritableConfig, error) { config := GtestDefaults{} if err := toml.PrimitiveDecode(prim, &config); err != nil { return nil, err } return &config, nil }