package gtest import ( "log" "golang.flu0r1ne.net/planr" "strings" "github.com/BurntSushi/toml" "path" ) const ( DEFAULT_TIMEOUT = 1000 ) type GtestDefaults struct { Name *string Suite *string Testfile *string Srcs *[]string Timeout *uint } 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.Srcs == nil) { child.Srcs = parent.Srcs } if(child.Timeout == nil) { child.Timeout = parent.Timeout } } 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) } if g.Timeout == nil { g.Timeout = new(uint) *g.Timeout = DEFAULT_TIMEOUT; } } func (cfg GtestConfig) srcList(srcDir string) string { var srcList string if cfg.Srcs != nil { srcs := make([]string, len(*cfg.Srcs)) for i, src := range *cfg.Srcs { srcs[i] = "\"" + path.Join(srcDir, 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 }