@@ -17,6 +17,7 @@ import (
1717 "net/http"
1818 "net/http/httptest"
1919 "os"
20+ "path/filepath"
2021 "reflect"
2122 "regexp"
2223 "runtime"
@@ -1088,6 +1089,89 @@ func Test_App_Order(t *testing.T) {
10881089 require .Equal (t , "123" , string (body ))
10891090}
10901091
1092+ func Test_App_AutoHead_Compliance (t * testing.T ) {
1093+ t .Parallel ()
1094+
1095+ app := New ()
1096+ app .Get ("/hello" , func (c Ctx ) error {
1097+ c .Set ("X-Test" , "string" )
1098+ return c .SendString ("hello" )
1099+ })
1100+ app .startupProcess ()
1101+
1102+ getReq := httptest .NewRequest (MethodGet , "/hello" , http .NoBody )
1103+ getResp , err := app .Test (getReq )
1104+ require .NoError (t , err , "app.Test(get)" )
1105+ defer func () {
1106+ require .NoError (t , getResp .Body .Close ())
1107+ }()
1108+
1109+ body , err := io .ReadAll (getResp .Body )
1110+ require .NoError (t , err )
1111+ require .Equal (t , "hello" , string (body ))
1112+ require .Equal (t , "string" , getResp .Header .Get ("X-Test" ))
1113+
1114+ headReq := httptest .NewRequest (MethodHead , "/hello" , http .NoBody )
1115+ headResp , err := app .Test (headReq )
1116+ require .NoError (t , err , "app.Test(head)" )
1117+ defer func () {
1118+ require .NoError (t , headResp .Body .Close ())
1119+ }()
1120+
1121+ require .Equal (t , getResp .StatusCode , headResp .StatusCode )
1122+ require .Equal (t , strconv .Itoa (len (body )), headResp .Header .Get (HeaderContentLength ))
1123+ require .Equal (t , getResp .Header .Get (HeaderContentType ), headResp .Header .Get (HeaderContentType ))
1124+ require .Equal (t , getResp .Header .Get ("X-Test" ), headResp .Header .Get ("X-Test" ))
1125+
1126+ headBody , err := io .ReadAll (headResp .Body )
1127+ require .NoError (t , err )
1128+ require .Empty (t , headBody )
1129+ }
1130+
1131+ func Test_App_AutoHead_Compliance_SendFile (t * testing.T ) {
1132+ t .Parallel ()
1133+
1134+ tmpDir := t .TempDir ()
1135+ filePath := filepath .Join (tmpDir , "hello.txt" )
1136+ fileContent := []byte ("file-body" )
1137+ require .NoError (t , os .WriteFile (filePath , fileContent , 0o644 ))
1138+
1139+ app := New ()
1140+ app .Get ("/file" , func (c Ctx ) error {
1141+ c .Set ("X-Test" , "file" )
1142+ return c .SendFile (filePath )
1143+ })
1144+ app .startupProcess ()
1145+
1146+ getReq := httptest .NewRequest (MethodGet , "/file" , http .NoBody )
1147+ getResp , err := app .Test (getReq )
1148+ require .NoError (t , err , "app.Test(get)" )
1149+ defer func () {
1150+ require .NoError (t , getResp .Body .Close ())
1151+ }()
1152+
1153+ body , err := io .ReadAll (getResp .Body )
1154+ require .NoError (t , err )
1155+ require .Equal (t , fileContent , body )
1156+ require .Equal (t , "file" , getResp .Header .Get ("X-Test" ))
1157+
1158+ headReq := httptest .NewRequest (MethodHead , "/file" , http .NoBody )
1159+ headResp , err := app .Test (headReq )
1160+ require .NoError (t , err , "app.Test(head)" )
1161+ defer func () {
1162+ require .NoError (t , headResp .Body .Close ())
1163+ }()
1164+
1165+ require .Equal (t , getResp .StatusCode , headResp .StatusCode )
1166+ require .Equal (t , strconv .Itoa (len (fileContent )), headResp .Header .Get (HeaderContentLength ))
1167+ require .Equal (t , getResp .Header .Get (HeaderContentType ), headResp .Header .Get (HeaderContentType ))
1168+ require .Equal (t , getResp .Header .Get ("X-Test" ), headResp .Header .Get ("X-Test" ))
1169+
1170+ headBody , err := io .ReadAll (headResp .Body )
1171+ require .NoError (t , err )
1172+ require .Empty (t , headBody )
1173+ }
1174+
10911175func Test_App_Methods (t * testing.T ) {
10921176 t .Parallel ()
10931177 dummyHandler := testEmptyHandler
0 commit comments