go-code-runner, v1.2
Posted on

The library that implements the compiling and running of a code written in the Go programming language and running of a test case set for the compiled code (i.e. the executable file).
Checking of package imports used in the code written in the Go programming language.
Change Log
- checking of package imports used in the code written in the Go programming language:
- checking based on the list of allowed imports;
- compiling of a code written in the Go programming language:
- checking of package imports used in the code (optionally):
- checking based on the list of allowed imports.
- checking of package imports used in the code (optionally):
Features
- saving of a code to a temporary file:
- storing of the temporary file with the code to an individual temporary directory;
- checking of package imports used in the code written in the Go programming language:
- checking based on the list of allowed imports;
- compiling of a code written in the Go programming language:
- automatic importing of the packages used in the code;
- checking of package imports used in the code (optionally):
- checking based on the list of allowed imports;
- enriching of an error of the external command running by an output from the stderr stream;
- running of the compiled code (i.e. the executable file):
- passing of a custom input as the stdin stream;
- returning of an output from the stdout stream;
- enriching of an error of the external command running by an output from the stderr stream;
- running of a test case set for the compiled code (i.e. the executable file):
- representation of a test case:
- input;
- expected output;
- checking of an actual output in each test case:
- returning of the sentinel errors:
- failed running — it returns on a running error;
- unexpected output — it returns when the expected and actual outputs do not match.
- returning of the sentinel errors:
- representation of a test case:
Examples
coderunner.CheckImports (success):
package main
import (
"fmt"
"log"
"os"
"path/filepath"
coderunner "github.com/thewizardplusplus/go-code-runner"
)
func main() {
const code = `
package main
import (
"fmt"
"log"
)
func main() {
var x, y int
if _, err := fmt.Scan(&x, &y); err != nil {
log.Fatal(err)
}
fmt.Println(x + y)
}
`
pathToCode, err := coderunner.SaveTemporaryCode(code)
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(filepath.Dir(pathToCode)) // nolint: errcheck
err = coderunner.CheckImports(pathToCode, []string{"fmt", "log"})
fmt.Printf("%v\n", err)
// Output:
// <nil>
}
coderunner.CheckImports (error):
package main
import (
"fmt"
"log"
"os"
"path/filepath"
coderunner "github.com/thewizardplusplus/go-code-runner"
)
func main() {
const code = `
package main
import (
"fmt"
"log"
)
func main() {
var x, y int
if _, err := fmt.Scan(&x, &y); err != nil {
log.Fatal(err)
}
fmt.Println(x + y)
}
`
pathToCode, err := coderunner.SaveTemporaryCode(code)
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(filepath.Dir(pathToCode)) // nolint: errcheck
err = coderunner.CheckImports(pathToCode, []string{"fmt"})
fmt.Printf("%v\n", err)
// Output:
// disallowed import "log"
}
Repository
Link: https://github.com/thewizardplusplus/go-code-runner/tree/v1.2.
Content: code.
License: MIT.