@@ -1977,6 +1977,263 @@ func TestContextShouldBindBodyWith(t *testing.T) {
19771977 }
19781978}
19791979
1980+ func TestContextShouldBindBodyWithJSON (t * testing.T ) {
1981+ for _ , tt := range []struct {
1982+ name string
1983+ bindingBody binding.BindingBody
1984+ body string
1985+ }{
1986+ {
1987+ name : " JSON & JSON-BODY " ,
1988+ bindingBody : binding .JSON ,
1989+ body : `{"foo":"FOO"}` ,
1990+ },
1991+ {
1992+ name : " JSON & XML-BODY " ,
1993+ bindingBody : binding .XML ,
1994+ body : `<?xml version="1.0" encoding="UTF-8"?>
1995+ <root>
1996+ <foo>FOO</foo>
1997+ </root>` ,
1998+ },
1999+ {
2000+ name : " JSON & YAML-BODY " ,
2001+ bindingBody : binding .YAML ,
2002+ body : `foo: FOO` ,
2003+ },
2004+ {
2005+ name : " JSON & TOM-BODY " ,
2006+ bindingBody : binding .TOML ,
2007+ body : `foo=FOO` ,
2008+ },
2009+ } {
2010+ t .Logf ("testing: %s" , tt .name )
2011+
2012+ w := httptest .NewRecorder ()
2013+ c , _ := CreateTestContext (w )
2014+
2015+ c .Request , _ = http .NewRequest ("POST" , "/" , bytes .NewBufferString (tt .body ))
2016+
2017+ type typeJSON struct {
2018+ Foo string `json:"foo" binding:"required"`
2019+ }
2020+ objJSON := typeJSON {}
2021+
2022+ if tt .bindingBody == binding .JSON {
2023+ assert .NoError (t , c .ShouldBindBodyWithJSON (& objJSON ))
2024+ assert .Equal (t , typeJSON {"FOO" }, objJSON )
2025+ }
2026+
2027+ if tt .bindingBody == binding .XML {
2028+ assert .Error (t , c .ShouldBindBodyWithJSON (& objJSON ))
2029+ assert .Equal (t , typeJSON {}, objJSON )
2030+ }
2031+
2032+ if tt .bindingBody == binding .YAML {
2033+ assert .Error (t , c .ShouldBindBodyWithJSON (& objJSON ))
2034+ assert .Equal (t , typeJSON {}, objJSON )
2035+ }
2036+
2037+ if tt .bindingBody == binding .TOML {
2038+ assert .Error (t , c .ShouldBindBodyWithJSON (& objJSON ))
2039+ assert .Equal (t , typeJSON {}, objJSON )
2040+ }
2041+ }
2042+ }
2043+
2044+ func TestContextShouldBindBodyWithXML (t * testing.T ) {
2045+ for _ , tt := range []struct {
2046+ name string
2047+ bindingBody binding.BindingBody
2048+ body string
2049+ }{
2050+ {
2051+ name : " XML & JSON-BODY " ,
2052+ bindingBody : binding .JSON ,
2053+ body : `{"foo":"FOO"}` ,
2054+ },
2055+ {
2056+ name : " XML & XML-BODY " ,
2057+ bindingBody : binding .XML ,
2058+ body : `<?xml version="1.0" encoding="UTF-8"?>
2059+ <root>
2060+ <foo>FOO</foo>
2061+ </root>` ,
2062+ },
2063+ {
2064+ name : " XML & YAML-BODY " ,
2065+ bindingBody : binding .YAML ,
2066+ body : `foo: FOO` ,
2067+ },
2068+ {
2069+ name : " XML & TOM-BODY " ,
2070+ bindingBody : binding .TOML ,
2071+ body : `foo=FOO` ,
2072+ },
2073+ } {
2074+ t .Logf ("testing: %s" , tt .name )
2075+
2076+ w := httptest .NewRecorder ()
2077+ c , _ := CreateTestContext (w )
2078+
2079+ c .Request , _ = http .NewRequest ("POST" , "/" , bytes .NewBufferString (tt .body ))
2080+
2081+ type typeXML struct {
2082+ Foo string `xml:"foo" binding:"required"`
2083+ }
2084+ objXML := typeXML {}
2085+
2086+ if tt .bindingBody == binding .JSON {
2087+ assert .Error (t , c .ShouldBindBodyWithXML (& objXML ))
2088+ assert .Equal (t , typeXML {}, objXML )
2089+ }
2090+
2091+ if tt .bindingBody == binding .XML {
2092+ assert .NoError (t , c .ShouldBindBodyWithXML (& objXML ))
2093+ assert .Equal (t , typeXML {"FOO" }, objXML )
2094+ }
2095+
2096+ if tt .bindingBody == binding .YAML {
2097+ assert .Error (t , c .ShouldBindBodyWithXML (& objXML ))
2098+ assert .Equal (t , typeXML {}, objXML )
2099+ }
2100+
2101+ if tt .bindingBody == binding .TOML {
2102+ assert .Error (t , c .ShouldBindBodyWithXML (& objXML ))
2103+ assert .Equal (t , typeXML {}, objXML )
2104+ }
2105+ }
2106+ }
2107+
2108+ func TestContextShouldBindBodyWithYAML (t * testing.T ) {
2109+ for _ , tt := range []struct {
2110+ name string
2111+ bindingBody binding.BindingBody
2112+ body string
2113+ }{
2114+ {
2115+ name : " YAML & JSON-BODY " ,
2116+ bindingBody : binding .JSON ,
2117+ body : `{"foo":"FOO"}` ,
2118+ },
2119+ {
2120+ name : " YAML & XML-BODY " ,
2121+ bindingBody : binding .XML ,
2122+ body : `<?xml version="1.0" encoding="UTF-8"?>
2123+ <root>
2124+ <foo>FOO</foo>
2125+ </root>` ,
2126+ },
2127+ {
2128+ name : " YAML & YAML-BODY " ,
2129+ bindingBody : binding .YAML ,
2130+ body : `foo: FOO` ,
2131+ },
2132+ {
2133+ name : " YAML & TOM-BODY " ,
2134+ bindingBody : binding .TOML ,
2135+ body : `foo=FOO` ,
2136+ },
2137+ } {
2138+ t .Logf ("testing: %s" , tt .name )
2139+
2140+ w := httptest .NewRecorder ()
2141+ c , _ := CreateTestContext (w )
2142+
2143+ c .Request , _ = http .NewRequest ("POST" , "/" , bytes .NewBufferString (tt .body ))
2144+
2145+ type typeYAML struct {
2146+ Foo string `yaml:"foo" binding:"required"`
2147+ }
2148+ objYAML := typeYAML {}
2149+
2150+ // YAML belongs to a super collection of JSON, so JSON can be parsed by YAML
2151+ if tt .bindingBody == binding .JSON {
2152+ assert .NoError (t , c .ShouldBindBodyWithYAML (& objYAML ))
2153+ assert .Equal (t , typeYAML {"FOO" }, objYAML )
2154+ }
2155+
2156+ if tt .bindingBody == binding .XML {
2157+ assert .Error (t , c .ShouldBindBodyWithYAML (& objYAML ))
2158+ assert .Equal (t , typeYAML {}, objYAML )
2159+ }
2160+
2161+ if tt .bindingBody == binding .YAML {
2162+ assert .NoError (t , c .ShouldBindBodyWithYAML (& objYAML ))
2163+ assert .Equal (t , typeYAML {"FOO" }, objYAML )
2164+ }
2165+
2166+ if tt .bindingBody == binding .TOML {
2167+ assert .Error (t , c .ShouldBindBodyWithYAML (& objYAML ))
2168+ assert .Equal (t , typeYAML {}, objYAML )
2169+ }
2170+ }
2171+ }
2172+
2173+ func TestContextShouldBindBodyWithTOML (t * testing.T ) {
2174+ for _ , tt := range []struct {
2175+ name string
2176+ bindingBody binding.BindingBody
2177+ body string
2178+ }{
2179+ {
2180+ name : " TOML & JSON-BODY " ,
2181+ bindingBody : binding .JSON ,
2182+ body : `{"foo":"FOO"}` ,
2183+ },
2184+ {
2185+ name : " TOML & XML-BODY " ,
2186+ bindingBody : binding .XML ,
2187+ body : `<?xml version="1.0" encoding="UTF-8"?>
2188+ <root>
2189+ <foo>FOO</foo>
2190+ </root>` ,
2191+ },
2192+ {
2193+ name : " TOML & YAML-BODY " ,
2194+ bindingBody : binding .YAML ,
2195+ body : `foo: FOO` ,
2196+ },
2197+ {
2198+ name : " TOML & TOM-BODY " ,
2199+ bindingBody : binding .TOML ,
2200+ body : `foo = 'FOO'` ,
2201+ },
2202+ } {
2203+ t .Logf ("testing: %s" , tt .name )
2204+
2205+ w := httptest .NewRecorder ()
2206+ c , _ := CreateTestContext (w )
2207+
2208+ c .Request , _ = http .NewRequest ("POST" , "/" , bytes .NewBufferString (tt .body ))
2209+
2210+ type typeTOML struct {
2211+ Foo string `toml:"foo" binding:"required"`
2212+ }
2213+ objTOML := typeTOML {}
2214+
2215+ if tt .bindingBody == binding .JSON {
2216+ assert .Error (t , c .ShouldBindBodyWithTOML (& objTOML ))
2217+ assert .Equal (t , typeTOML {}, objTOML )
2218+ }
2219+
2220+ if tt .bindingBody == binding .XML {
2221+ assert .Error (t , c .ShouldBindBodyWithTOML (& objTOML ))
2222+ assert .Equal (t , typeTOML {}, objTOML )
2223+ }
2224+
2225+ if tt .bindingBody == binding .YAML {
2226+ assert .Error (t , c .ShouldBindBodyWithTOML (& objTOML ))
2227+ assert .Equal (t , typeTOML {}, objTOML )
2228+ }
2229+
2230+ if tt .bindingBody == binding .TOML {
2231+ assert .NoError (t , c .ShouldBindBodyWithTOML (& objTOML ))
2232+ assert .Equal (t , typeTOML {"FOO" }, objTOML )
2233+ }
2234+ }
2235+ }
2236+
19802237func TestContextGolangContext (t * testing.T ) {
19812238 c , _ := CreateTestContext (httptest .NewRecorder ())
19822239 c .Request , _ = http .NewRequest ("POST" , "/" , bytes .NewBufferString ("{\" foo\" :\" bar\" , \" bar\" :\" foo\" }" ))
0 commit comments