diff options
Diffstat (limited to 'adapters/gtest/templating.go')
| -rw-r--r-- | adapters/gtest/templating.go | 84 | 
1 files changed, 84 insertions, 0 deletions
diff --git a/adapters/gtest/templating.go b/adapters/gtest/templating.go new file mode 100644 index 0000000..a78eaf8 --- /dev/null +++ b/adapters/gtest/templating.go @@ -0,0 +1,84 @@ +package gtest + +import ( +	"io" +	"log" +	"text/template" +        "os" +) + +type cmakeUnit struct { +  Cname string +  File  string +  Srcs  string +}; + +func genCmake(out string, units []cmakeUnit) { +  file, err := os.OpenFile(out, os.O_RDWR | os.O_CREATE, 0644) +  defer func () { +    err := file.Close() + +    if err != nil { +      log.Fatal(err) +    } +  }() + +  if err != nil { +    log.Fatalf("Could not open CMakeFile (%s)\n%v", out, err) +  } + +  writeBoiler(file) +   +  tmpl := unitTemplate() + +  for _, unit := range units { +    if err := tmpl.Execute(file, unit); err != nil { +      log.Fatalf("Failed to generate unit %s: %v", unit.Cname, err); +    } +  } +} + + +func unitTemplate() *template.Template { +  tmpl, err := template.New("gtest_unit").Parse(` +add_executable( +  {{.Cname}} +  {{.File}} +  {{.Srcs}} +) + +target_link_libraries( +  {{.Cname}} +  gtest_main +) + +gtest_discover_tests( +  {{.Cname}} +) +`) + +  if err != nil { +    log.Fatalf("Cannot load Gtest Unit Template %v", err) +  } + +  return tmpl +} + +func writeBoiler(w io.Writer) { +  w.Write([]byte(` +cmake_minimum_required (VERSION 3.1.0) + +project(PlanRGtestAdapter) + +include(FetchContent) +FetchContent_Declare( +  googletest +  URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip +) + +include(GoogleTest) +FetchContent_MakeAvailable(googletest) +`)) +} + +  | 
