QueryJSON: Avoid overriding Terraform.Stdout directly (#619)
diff --git a/tfexec/cmd.go b/tfexec/cmd.go
index 153667a..149da2e 100644
--- a/tfexec/cmd.go
+++ b/tfexec/cmd.go
@@ -230,7 +230,7 @@
 // Due to this it returns an iterator that allows calling code to consume a stream of messages.
 func (tf *Terraform) runTerraformCmdJSONLog(ctx context.Context, cmd *exec.Cmd) iter.Seq[NextMessage] {
 	pr, pw := io.Pipe()
-	tf.SetStdout(pw)
+	cmd.Stdout = mergeWriters(cmd.Stdout, pw)
 
 	emitter := newLogMsgEmitter(pr)
 
diff --git a/tfexec/internal/e2etest/query_test.go b/tfexec/internal/e2etest/query_test.go
index 67bc6fc..7b85957 100644
--- a/tfexec/internal/e2etest/query_test.go
+++ b/tfexec/internal/e2etest/query_test.go
@@ -5,6 +5,7 @@
 
 import (
 	"context"
+	"path/filepath"
 	"regexp"
 	"testing"
 
@@ -80,3 +81,44 @@
 		}
 	})
 }
+
+func TestQueryJSON_andValidate(t *testing.T) {
+	versions := []string{testutil.Latest_Alpha_v1_14}
+	runTestWithVersions(t, versions, "query", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
+		err := tf.Init(context.Background())
+		if err != nil {
+			t.Fatalf("error running Init in test directory: %s", err)
+		}
+
+		cfgOutPath := filepath.Join(tf.WorkingDir(), "gen.tf")
+		iter, err := tf.QueryJSON(t.Context(), tfexec.GenerateConfigOut(cfgOutPath))
+		if err != nil {
+			t.Fatalf("error running Query: %s", err)
+		}
+
+		var completeData tfjson.ListCompleteData
+		for nextMsg := range iter {
+			if nextMsg.Err != nil {
+				t.Fatalf("error getting next message: %s", nextMsg.Err)
+			}
+			switch m := nextMsg.Msg.(type) {
+			case tfjson.ListCompleteMessage:
+				completeData = m.ListComplete
+			}
+		}
+
+		expectedData := tfjson.ListCompleteData{
+			Address:      "list.concept_pet.pets",
+			ResourceType: "concept_pet",
+			Total:        5,
+		}
+		if diff := cmp.Diff(expectedData, completeData); diff != "" {
+			t.Fatalf("unexpected complete message data: %s", diff)
+		}
+
+		_, err = tf.Validate(t.Context())
+		if err != nil {
+			t.Fatalf("failed to run validate after query: %s", err)
+		}
+	})
+}