add coverage/build test

This commit is contained in:
Konstantin8105 2022-11-27 13:40:01 +03:00
parent 18ffd04b2a
commit 9d3608bac1
10 changed files with 236 additions and 15 deletions

View file

@ -21,3 +21,9 @@ jobs:
- name: Build - name: Build
run: go build ./... run: go build ./...
working-directory: raylib working-directory: raylib
- name: Install gocovmerge
run: go install github.com/wadey/gocovmerge@latest
working-directory: .
- name: Coverage without view the results
run: go run coverage.go
working-directory: .

2
.gitignore vendored
View file

@ -5,3 +5,5 @@
# Ignore go.sum when go.mod is added. # Ignore go.sum when go.mod is added.
go.sum go.sum
**/coverage_test.go
**/*.coverage

200
coverage.go Normal file
View file

@ -0,0 +1,200 @@
package main
import (
"errors"
"flag"
"fmt"
"log"
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
)
const (
exitName = "exit_key"
coverage_test = `
package main
import (
"testing"
"time"
)
func Test(t *testing.T) {
go func() {
time.Sleep(time.Second)
exit_key = true
}()
main()
}`
)
// coverage packages
var coverpkgs = [...]string{
"github.com/gen2brain/raylib-go/raylib",
"github.com/gen2brain/raylib-go/raygui",
}
func main() {
// only for linux
switch runtime.GOOS {
case "linux", "darwin":
// do nothing
default:
log.Println("not supported OS")
return
}
view := flag.Bool("v", false, "view html result of coverage test")
flag.Parse()
// test of test
if !strings.Contains(coverage_test, exitName) {
log.Fatalln("source of main_test have not name: ", exitName)
return
}
// create templorary folder
tempDir, err := os.MkdirTemp("", "coverage")
if err != nil {
log.Fatal(err)
return
}
log.Println("Prepare test folder: ", tempDir)
// do not delete templorary folder
// defer os.Remove(tempDir.Name())
// // copy example folder
// log.Println("copy `examples` folder")
// if _, err := exec.Command("cp", "-r", "./examples/", tempDir).Output(); err != nil {
// log.Fatalf("%v", err)
// return
// }
// walking
log.Println("walking by temp folder with `main.go` files")
var testPaths []string
if err := filepath.Walk("./examples/",
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !strings.HasSuffix(path, "main.go") {
return nil
}
index := strings.LastIndex(path, "/")
testPaths = append(testPaths, path[:index])
return nil
}); err != nil {
log.Fatalf("%v", err)
return
}
// TODO: create test in parallel
for index, testPath := range testPaths {
if 0 < flag.NArg() && !strings.Contains(testPath, os.Args[len(os.Args)-1]) {
continue
}
if err := coverage(index, testPath, tempDir); err != nil {
log.Fatalf("%v", err)
return
}
}
// combine coverage files
log.Println("combine coverage files")
var combineFiles []string
combineName := "all.coverage"
if err := filepath.Walk(tempDir,
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
combineFiles = append(combineFiles, path)
fmt.Println(path)
return nil
}); err != nil {
log.Fatalf("%v", err)
return
}
cmd := exec.Command("gocovmerge", combineFiles...)
cmd.Dir = "./raygui/"
var out []byte
out, err = cmd.Output()
if err != nil {
log.Fatalf("gocovmerge: %v", err)
return
}
if err = os.WriteFile("./raygui/"+combineName, []byte(out), 0644); err != nil {
log.Fatalf("writefile: %v", err)
return
}
// run coverage
if *view {
log.Println("run coverage")
cmd = exec.Command(
"go", "tool", "cover",
"-html="+combineName,
)
cmd.Dir = "./raygui/"
if _, err = cmd.Output(); err != nil {
log.Fatalf("%v", err)
return
}
}
}
func coverage(index int, testPath, coverPath string) (err error) {
name := strings.ReplaceAll(testPath, coverPath, "")
log.Printf("run: %s", name)
// has file main.go
if _, err = os.Stat(testPath + "/main.go"); errors.Is(err, os.ErrNotExist) {
log.Printf("file `main.go` not exist")
return
}
// has exitName
{
var dat []byte
dat, err = os.ReadFile(testPath + "/main.go")
if err != nil {
log.Fatalf("readfile: %v", err)
return
}
if !strings.Contains(string(dat), exitName) {
log.Printf("file `main.go` have not `%s`", exitName)
return
}
}
// create main_test file
log.Println("create `main_test.go` file")
if err = os.WriteFile(testPath+"/coverage_test.go", []byte(coverage_test), 0644); err != nil {
log.Fatalf("writefile: %v", err)
return
}
// testing
log.Println("testing")
for ic, cpkg := range coverpkgs {
cmd := exec.Command(
"go", "test",
fmt.Sprintf("-coverprofile=%s/%d.%d.coverage", coverPath, index, ic),
fmt.Sprintf("-coverpkg=%s", cpkg),
)
cmd.Dir = testPath
if _, err = cmd.Output(); err != nil {
log.Fatalf("%v", err)
return
}
}
return
}

View file

@ -8,6 +8,8 @@ import (
rl "github.com/gen2brain/raylib-go/raylib" rl "github.com/gen2brain/raylib-go/raylib"
) )
var exit_key = false
func main() { func main() {
screenWidth := int32(800) screenWidth := int32(800)
screenHeight := int32(450) screenHeight := int32(450)
@ -38,7 +40,7 @@ func main() {
rl.SetTargetFPS(60) rl.SetTargetFPS(60)
for !rl.WindowShouldClose() { for !(rl.WindowShouldClose() || exit_key) {
if buttonClicked { if buttonClicked {
progressValue += 0.1 progressValue += 0.1
if progressValue >= 1.1 { if progressValue >= 1.1 {

View file

@ -6,3 +6,6 @@ require (
github.com/gen2brain/raylib-go/raygui v0.0.0-20221117130019-ce3c8e83dd6d github.com/gen2brain/raylib-go/raygui v0.0.0-20221117130019-ce3c8e83dd6d
github.com/gen2brain/raylib-go/raylib v0.0.0-20221117130019-ce3c8e83dd6d github.com/gen2brain/raylib-go/raylib v0.0.0-20221117130019-ce3c8e83dd6d
) )
replace github.com/gen2brain/raylib-go/raylib => ../../../raylib
replace github.com/gen2brain/raylib-go/raygui => ../../../raygui

View file

@ -3,10 +3,12 @@ package main
import ( import (
"fmt" "fmt"
rl "github.com/gen2brain/raylib-go/raylib" gui "github.com/gen2brain/raylib-go/raygui"
gui "github.com/gen2brain/raylib-go/raygui" rl "github.com/gen2brain/raylib-go/raylib"
) )
var exit_key = false
func main() { func main() {
rl.InitWindow(800, 450, "raygui - button") rl.InitWindow(800, 450, "raygui - button")
@ -14,7 +16,7 @@ func main() {
var button bool var button bool
for !rl.WindowShouldClose() { for !(rl.WindowShouldClose() || exit_key) {
rl.BeginDrawing() rl.BeginDrawing()
rl.ClearBackground(rl.Black) rl.ClearBackground(rl.Black)

View file

@ -7,6 +7,8 @@ import (
rl "github.com/gen2brain/raylib-go/raylib" rl "github.com/gen2brain/raylib-go/raylib"
) )
var exit_key = false
/******************************************************************************************* /*******************************************************************************************
* *
* raygui - controls test suite * raygui - controls test suite
@ -123,7 +125,7 @@ func main() {
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Main game loop // Main game loop
for !exitWindow { // Detect window close button or ESC key for !(exitWindow || exit_key) { // Detect window close button or ESC key
// Update // Update
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
exitWindow = rl.WindowShouldClose() exitWindow = rl.WindowShouldClose()
@ -228,7 +230,7 @@ func main() {
sliderValue = gui.Slider(rl.Rectangle{355, 400, 165, 20}, "TEST", sliderValue = gui.Slider(rl.Rectangle{355, 400, 165, 20}, "TEST",
fmt.Sprintf("%2.2f", sliderValue), sliderValue, -50, 100) fmt.Sprintf("%2.2f", sliderValue), sliderValue, -50, 100)
sliderBarValue = gui.SliderBar(rl.Rectangle{320, 430, 200, 20}, "", sliderBarValue = gui.SliderBar(rl.Rectangle{320, 430, 200, 20}, "",
fmt.Sprint("%d", sliderBarValue), sliderBarValue, 0, 100) fmt.Sprintf("%2.2f", sliderBarValue), sliderBarValue, 0, 100)
progressValue = gui.ProgressBar(rl.Rectangle{320, 460, 200, 20}, "", "", progressValue, 0, 1) progressValue = gui.ProgressBar(rl.Rectangle{320, 460, 200, 20}, "", "", progressValue, 0, 1)
// NOTE: View rectangle could be used to perform some scissor test // NOTE: View rectangle could be used to perform some scissor test

View file

@ -24,6 +24,8 @@ import (
* *
**********************************************************************************************/ **********************************************************************************************/
var exit_key = false
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
// Program main entry point // Program main entry point
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
@ -54,7 +56,7 @@ func main() {
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Main game loop // Main game loop
for !exitWindow && !rl.WindowShouldClose() { // Detect window close button or ESC key for !(exitWindow || rl.WindowShouldClose() || exit_key) { // Detect window close button or ESC key
// Update // Update
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
mousePosition = rl.GetMousePosition() mousePosition = rl.GetMousePosition()

View file

@ -30,6 +30,8 @@ import (
* *
**********************************************************************************************/ **********************************************************************************************/
var exit_key = false
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
// Program main entry point // Program main entry point
//------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------
@ -56,7 +58,7 @@ func main() {
//--------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------
// Main game loop // Main game loop
for !rl.WindowShouldClose() { for !(rl.WindowShouldClose() || exit_key) {
// Detect window close button or ESC key // Detect window close button or ESC key
// Update // Update
@ -85,10 +87,10 @@ func main() {
if showContentArea { if showContentArea {
rl.DrawRectangle( rl.DrawRectangle(
int32(panelRec.X+panelScroll.X), int32(panelRec.X+panelScroll.X),
int32(panelRec.Y+panelScroll.Y), int32(panelRec.Y+panelScroll.Y),
int32(panelContentRec.Width), int32(panelContentRec.Width),
int32(panelContentRec.Height), int32(panelContentRec.Height),
rl.Fade(rl.Red, 0.1), rl.Fade(rl.Red, 0.1),
) )
} }
@ -140,7 +142,7 @@ func DrawStyleEditControls() {
gui.Spinner(rl.Rectangle{670, 240, 90, 20}, "", &style, 0, 14, false) gui.Spinner(rl.Rectangle{670, 240, 90, 20}, "", &style, 0, 14, false)
gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING, style) gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING, style)
style = boolToint32( gui.CheckBox(rl.Rectangle{565, 280, 20, 20}, "ARROWS_VISIBLE", int32Tobool(gui.GetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE)))) style = boolToint32(gui.CheckBox(rl.Rectangle{565, 280, 20, 20}, "ARROWS_VISIBLE", int32Tobool(gui.GetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE))))
gui.SetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE, style) gui.SetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE, style)
style = gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING) style = gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING)
@ -159,7 +161,7 @@ func DrawStyleEditControls() {
} else { } else {
text = "SCROLLBAR: RIGHT" text = "SCROLLBAR: RIGHT"
} }
style = boolToint32( gui.Toggle(rl.Rectangle{560, 110, 200, 35}, text, int32Tobool(gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE)))) style = boolToint32(gui.Toggle(rl.Rectangle{560, 110, 200, 35}, text, int32Tobool(gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE))))
gui.SetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE, style) gui.SetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE, style)
//---------------------------------------------------------- //----------------------------------------------------------

View file

@ -4,4 +4,4 @@ go 1.19
require github.com/gen2brain/raylib-go/raylib v0.0.0-20221117130019-ce3c8e83dd6d require github.com/gen2brain/raylib-go/raylib v0.0.0-20221117130019-ce3c8e83dd6d
replace github.com/gen2brain/raylib-go/raylib => ../../../raylib replace github.com/gen2brain/raylib-go/raylib => ../raylib