cue: support multierror return from Unify

Also fixes:
- file naming issue in Marshalling, which was not
  relative to the module root, if available.
- gocode generated output was not checked
  against golden (which was only used in gen_test.go)

Change-Id: I6a5f5363e2d0656ef3935fc46f84444ccbdd9a3e
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2942
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/encoding/gocode/generator_test.go b/encoding/gocode/generator_test.go
index 70e0aa8..a4ad90a 100644
--- a/encoding/gocode/generator_test.go
+++ b/encoding/gocode/generator_test.go
@@ -26,6 +26,7 @@
 	"cuelang.org/go/cue"
 	"cuelang.org/go/cue/errors"
 	"cuelang.org/go/cue/load"
+	"github.com/kylelemons/godebug/diff"
 )
 
 var update = flag.Bool("update", false, "update test files")
@@ -62,13 +63,21 @@
 			if err != nil {
 				t.Fatal(errStr(err))
 			}
-			// t.Log(string(b))
 
 			goFile := filepath.Join("testdata", d.Name(), "cue_gen.go")
 			if *update {
 				_ = ioutil.WriteFile(goFile, b, 0644)
 				return
 			}
+
+			want, err := ioutil.ReadFile(goFile)
+			if err != nil {
+				t.Fatal(err)
+			}
+
+			if d := diff.Diff(string(want), string(b)); d != "" {
+				t.Errorf("files differ:\n%v", d)
+			}
 		})
 	}
 }