package compiler_test

import (
	"io/ioutil"
	"os"
	"path"
	"testing"

	"github.com/CityOfZion/neo-go/pkg/vm/compiler"
)

const examplePath = "../../../examples"

func TestExamplesFolder(t *testing.T) {
	infos, err := ioutil.ReadDir(examplePath)
	if err != nil {
		t.Fatal(err)
	}

	for _, info := range infos {
		infos, err := ioutil.ReadDir(path.Join(examplePath, info.Name()))
		if err != nil {
			t.Fatal(err)
		}
		if len(infos) == 0 {
			t.Fatal("detected smart contract folder with no contract in it")
		}

		filename := filterFilename(infos)
		targetPath := path.Join(examplePath, info.Name(), filename)
		if err := compileFile(targetPath); err != nil {
			t.Fatal(err)
		}
	}
}

func filterFilename(infos []os.FileInfo) string {
	for _, info := range infos {
		if !info.IsDir() {
			return info.Name()
		}
	}
	return ""
}

func compileFile(src string) error {
	o := compiler.Options{
		Outfile: "tmp/contract.avm",
	}

	file, err := os.Open(src)
	if err != nil {
		return err
	}
	_, err = compiler.Compile(file, &o)
	return err
}