Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // 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 Rosencrantz | bca4981 | 2015-03-01 21:32:54 -0800 | [diff] [blame] | 5 | package main |
| 6 | |
| 7 | import ( |
| 8 | "bytes" |
| 9 | "fmt" |
| 10 | "io/ioutil" |
| 11 | "os" |
| 12 | "path/filepath" |
| 13 | "strings" |
| 14 | "testing" |
Todd Wang | f1550cf | 2015-05-11 10:58:41 -0700 | [diff] [blame] | 15 | |
Todd Wang | 9560b9c | 2015-05-11 13:27:58 -0700 | [diff] [blame] | 16 | "v.io/x/lib/cmdline" |
Matt Rosencrantz | bca4981 | 2015-03-01 21:32:54 -0800 | [diff] [blame] | 17 | ) |
| 18 | |
| 19 | const ( |
| 20 | testDir = "../../lib/vdl/testdata/base" |
| 21 | outPkgPath = "v.io/x/ref/lib/vdl/testdata/base" |
| 22 | ) |
| 23 | |
Cosmos Nicolaou | 8c3faba | 2015-03-25 22:23:32 -0700 | [diff] [blame] | 24 | //go:generate v23 test generate |
| 25 | |
Matt Rosencrantz | bca4981 | 2015-03-01 21:32:54 -0800 | [diff] [blame] | 26 | // Compares generated VDL files against the copy in the repo. |
| 27 | func TestVDLGenerator(t *testing.T) { |
Matt Rosencrantz | bca4981 | 2015-03-01 21:32:54 -0800 | [diff] [blame] | 28 | // 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 Sivakumar | 6901a2e | 2015-04-02 11:39:19 -0700 | [diff] [blame] | 35 | outOpt := fmt.Sprintf("--go-out-dir=%s", outDir) |
Todd Wang | 4437852 | 2015-05-22 17:18:55 -0700 | [diff] [blame] | 36 | env := cmdline.EnvFromOS() |
Todd Wang | 9560b9c | 2015-05-11 13:27:58 -0700 | [diff] [blame] | 37 | if err := cmdline.ParseAndRun(cmdVDL, env, []string{"generate", "--lang=go", outOpt, testDir}); err != nil { |
Matt Rosencrantz | bca4981 | 2015-03-01 21:32:54 -0800 | [diff] [blame] | 38 | 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 | } |