From 4c64f1c3859fa853659ff1db65a8f0fa67856ed9 Mon Sep 17 00:00:00 2001
From: mstmdev <mstmdev@gmail.com>
Date: Sun, 16 Oct 2022 09:33:26 +0800
Subject: [PATCH] =?UTF-8?q?chore(go):=20Add=C2=A0support=20go=201.19=20(#3?=
 =?UTF-8?q?272)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .github/workflows/gin.yml |  2 +-
 context_1.17_test.go      | 17 +++++++++++++++++
 context_1.19_test.go      | 31 +++++++++++++++++++++++++++++++
 3 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 context_1.19_test.go

diff --git a/.github/workflows/gin.yml b/.github/workflows/gin.yml
index 686d08a3..18b36d0e 100644
--- a/.github/workflows/gin.yml
+++ b/.github/workflows/gin.yml
@@ -31,7 +31,7 @@ jobs:
     strategy:
       matrix:
         os: [ubuntu-latest, macos-latest]
-        go: [1.16, 1.17, 1.18]
+        go: [1.16, 1.17, 1.18, 1.19]
         test-tags: ['', '-tags nomsgpack', '-tags "sonic avx"', '-tags go_json']
         include:
           - os: ubuntu-latest
diff --git a/context_1.17_test.go b/context_1.17_test.go
index 23377ffd..0f8527fe 100644
--- a/context_1.17_test.go
+++ b/context_1.17_test.go
@@ -12,6 +12,8 @@ import (
 	"mime/multipart"
 	"net/http"
 	"net/http/httptest"
+	"runtime"
+	"strings"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
@@ -28,6 +30,9 @@ func (i interceptedWriter) WriteHeader(code int) {
 }
 
 func TestContextFormFileFailed17(t *testing.T) {
+	if !isGo117OrGo118() {
+		return
+	}
 	buf := new(bytes.Buffer)
 	mw := multipart.NewWriter(buf)
 	defer func(mw *multipart.Writer) {
@@ -75,3 +80,15 @@ func TestInterceptedHeader(t *testing.T) {
 	assert.Equal(t, "", w.Result().Header.Get("X-Test"))
 	assert.Equal(t, "present", w.Result().Header.Get("X-Test-2"))
 }
+
+func isGo117OrGo118() bool {
+	version := strings.Split(runtime.Version()[2:], ".")
+	if len(version) >= 2 {
+		x := version[0]
+		y := version[1]
+		if x == "1" && (y == "17" || y == "18") {
+			return true
+		}
+	}
+	return false
+}
diff --git a/context_1.19_test.go b/context_1.19_test.go
new file mode 100644
index 00000000..4b34ea24
--- /dev/null
+++ b/context_1.19_test.go
@@ -0,0 +1,31 @@
+// Copyright 2022 Gin Core Team. All rights reserved.
+// Use of this source code is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+//go:build go1.19
+// +build go1.19
+
+package gin
+
+import (
+	"bytes"
+	"mime/multipart"
+	"net/http"
+	"net/http/httptest"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestContextFormFileFailed19(t *testing.T) {
+	buf := new(bytes.Buffer)
+	mw := multipart.NewWriter(buf)
+	mw.Close()
+	c, _ := CreateTestContext(httptest.NewRecorder())
+	c.Request, _ = http.NewRequest("POST", "/", nil)
+	c.Request.Header.Set("Content-Type", mw.FormDataContentType())
+	c.engine.MaxMultipartMemory = 8 << 20
+	f, err := c.FormFile("file")
+	assert.Error(t, err)
+	assert.Nil(t, f)
+}