2018-08-21 12:51:16 +00:00
|
|
|
package compiler_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"testing"
|
|
|
|
|
2020-03-03 14:21:42 +00:00
|
|
|
"github.com/nspcc-dev/neo-go/pkg/compiler"
|
2020-06-25 16:21:49 +00:00
|
|
|
"github.com/nspcc-dev/neo-go/pkg/config"
|
2020-01-14 14:33:04 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2018-08-21 12:51:16 +00:00
|
|
|
)
|
|
|
|
|
2019-12-03 15:18:14 +00:00
|
|
|
const examplePath = "../../examples"
|
2020-01-14 14:33:04 +00:00
|
|
|
const exampleCompilePath = "testdata/compile"
|
|
|
|
const exampleSavePath = exampleCompilePath + "/save"
|
2018-08-21 12:51:16 +00:00
|
|
|
|
2020-01-14 14:33:04 +00:00
|
|
|
type compilerTestCase struct {
|
|
|
|
name string
|
2020-02-29 15:55:16 +00:00
|
|
|
function func(*testing.T)
|
2020-01-14 14:33:04 +00:00
|
|
|
}
|
2018-08-21 12:51:16 +00:00
|
|
|
|
2020-01-14 14:33:04 +00:00
|
|
|
func TestCompiler(t *testing.T) {
|
2020-06-25 16:21:49 +00:00
|
|
|
// CompileAndSave use config.Version for proper .nef generation.
|
|
|
|
config.Version = "0.90.0-test"
|
2020-01-14 14:33:04 +00:00
|
|
|
testCases := []compilerTestCase{
|
2020-08-10 15:23:45 +00:00
|
|
|
{
|
|
|
|
name: "TestCompileDirectory",
|
|
|
|
function: func(t *testing.T) {
|
|
|
|
const multiMainDir = "testdata/multi"
|
|
|
|
_, di, err := compiler.CompileWithDebugInfo(multiMainDir, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
m := map[string]bool{}
|
|
|
|
for i := range di.Methods {
|
|
|
|
m[di.Methods[i].Name.Name] = true
|
|
|
|
}
|
|
|
|
require.Contains(t, m, "Func1")
|
|
|
|
require.Contains(t, m, "Func2")
|
|
|
|
},
|
|
|
|
},
|
2020-01-14 14:33:04 +00:00
|
|
|
{
|
|
|
|
name: "TestCompile",
|
2020-02-29 15:55:16 +00:00
|
|
|
function: func(t *testing.T) {
|
2020-01-14 14:33:04 +00:00
|
|
|
infos, err := ioutil.ReadDir(examplePath)
|
|
|
|
require.NoError(t, err)
|
|
|
|
for _, info := range infos {
|
|
|
|
infos, err := ioutil.ReadDir(path.Join(examplePath, info.Name()))
|
|
|
|
require.NoError(t, err)
|
2020-02-29 15:55:16 +00:00
|
|
|
require.False(t, len(infos) == 0, "detected smart contract folder with no contract in it")
|
2018-08-22 17:07:36 +00:00
|
|
|
|
2020-01-14 14:33:04 +00:00
|
|
|
filename := filterFilename(infos)
|
|
|
|
targetPath := path.Join(examplePath, info.Name(), filename)
|
2020-02-29 15:55:16 +00:00
|
|
|
require.NoError(t, compileFile(targetPath))
|
2020-01-14 14:33:04 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "TestCompileAndSave",
|
2020-02-29 15:55:16 +00:00
|
|
|
function: func(t *testing.T) {
|
2020-01-14 14:33:04 +00:00
|
|
|
infos, err := ioutil.ReadDir(exampleCompilePath)
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = os.MkdirAll(exampleSavePath, os.ModePerm)
|
|
|
|
require.NoError(t, err)
|
2020-06-25 16:21:49 +00:00
|
|
|
outfile := exampleSavePath + "/test.nef"
|
2020-02-29 15:55:16 +00:00
|
|
|
_, err = compiler.CompileAndSave(exampleCompilePath+"/"+infos[0].Name(), &compiler.Options{Outfile: outfile})
|
|
|
|
require.NoError(t, err)
|
2020-01-14 14:33:04 +00:00
|
|
|
defer func() {
|
|
|
|
err := os.RemoveAll(exampleSavePath)
|
|
|
|
require.NoError(t, err)
|
|
|
|
}()
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tcase := range testCases {
|
2020-02-29 15:55:16 +00:00
|
|
|
t.Run(tcase.name, tcase.function)
|
2018-08-21 12:51:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-08-22 17:07:36 +00:00
|
|
|
func filterFilename(infos []os.FileInfo) string {
|
|
|
|
for _, info := range infos {
|
|
|
|
if !info.IsDir() {
|
|
|
|
return info.Name()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
2018-08-21 12:51:16 +00:00
|
|
|
func compileFile(src string) error {
|
2020-08-10 15:23:45 +00:00
|
|
|
_, err := compiler.Compile(src, nil)
|
2018-08-21 12:51:16 +00:00
|
|
|
return err
|
|
|
|
}
|