blob: da17bb91945e7948f85e46930d9ac7c9d72baa2f [file] [log] [blame]
Jiri Simsad7616c92015-03-24 23:44:30 -07001// Copyright 2015 The Vanadium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Matt Rosencrantzbca49812015-03-01 21:32:54 -08005package main
6
7import (
8 "bytes"
9 "fmt"
10 "io/ioutil"
11 "os"
12 "path/filepath"
13 "strings"
14 "testing"
Todd Wangf1550cf2015-05-11 10:58:41 -070015
Todd Wang9560b9c2015-05-11 13:27:58 -070016 "v.io/x/lib/cmdline"
Matt Rosencrantzbca49812015-03-01 21:32:54 -080017)
18
19const (
20 testDir = "../../lib/vdl/testdata/base"
21 outPkgPath = "v.io/x/ref/lib/vdl/testdata/base"
22)
23
Cosmos Nicolaou8c3faba2015-03-25 22:23:32 -070024//go:generate v23 test generate
25
Matt Rosencrantzbca49812015-03-01 21:32:54 -080026// Compares generated VDL files against the copy in the repo.
27func TestVDLGenerator(t *testing.T) {
Matt Rosencrantzbca49812015-03-01 21:32:54 -080028 // Use vdl to generate Go code from input, into a temporary directory.
29 outDir, err := ioutil.TempDir("", "vdltest")
30 if err != nil {
31 t.Fatalf("TempDir() failed: %v", err)
32 }
33 defer os.RemoveAll(outDir)
34 // TODO(toddw): test the generated java and javascript files too.
Suharsh Sivakumar6901a2e2015-04-02 11:39:19 -070035 outOpt := fmt.Sprintf("--go-out-dir=%s", outDir)
Todd Wang44378522015-05-22 17:18:55 -070036 env := cmdline.EnvFromOS()
Todd Wang9560b9c2015-05-11 13:27:58 -070037 if err := cmdline.ParseAndRun(cmdVDL, env, []string{"generate", "--lang=go", outOpt, testDir}); err != nil {
Matt Rosencrantzbca49812015-03-01 21:32:54 -080038 t.Fatalf("Execute() failed: %v", err)
39 }
40 // Check that each *.vdl.go file in the testDir matches the generated output.
41 entries, err := ioutil.ReadDir(testDir)
42 if err != nil {
43 t.Fatalf("ReadDir(%v) failed: %v", testDir, err)
44 }
45 numEqual := 0
46 for _, entry := range entries {
47 if !strings.HasSuffix(entry.Name(), ".vdl.go") {
48 continue
49 }
50 testFile := filepath.Join(testDir, entry.Name())
51 testBytes, err := ioutil.ReadFile(testFile)
52 if err != nil {
53 t.Fatalf("ReadFile(%v) failed: %v", testFile, err)
54 }
55 outFile := filepath.Join(outDir, outPkgPath, entry.Name())
56 outBytes, err := ioutil.ReadFile(outFile)
57 if err != nil {
58 t.Fatalf("ReadFile(%v) failed: %v", outFile, err)
59 }
60 if !bytes.Equal(outBytes, testBytes) {
61 t.Fatalf("GOT:\n%v\n\nWANT:\n%v\n", string(outBytes), string(testBytes))
62 }
63 numEqual++
64 }
65 if numEqual == 0 {
66 t.Fatalf("testDir %s has no golden files *.vdl.go", testDir)
67 }
68}