// Test of gowebmsgpack.MsgpackFormatter.Format().
func TestFormatterFormat(t *testing.T) {

	// Create and regist formatter
	formatter := new(MsgpackFormatter)
	goweb.AddFormatter(formatter)

	// Create context
	r, _ := http.NewRequest("GET", "http://localhsot:8080", nil)
	w := httptest.NewRecorder()
	pathPrams := goweb.ParameterValueMap(make(map[string]string))
	cx := &goweb.Context{r, w, pathPrams, MSGPACK_FORMAT}

	data := []int{1, 2, 3}
	result := struct {
		C string
		S int
		D interface{}
		E []string
	}{
		"",
		http.StatusOK,
		data,
		nil,
	}
	expect, _ := msgpack.Marshal(result)
	cx.RespondWithData(data)
	actual := w.Body.Bytes()
	if !bytes.Equal(expect, actual) {
		t.Errorf("expect %v but actual %v.", expect, actual)
	}
}
// Test of MsgpackRequestDecoder.Decode().
func TestDecoderDecode(t *testing.T) {

	expect := []int{1, 2, 3}
	body, _ := msgpack.Marshal(expect)

	// Create context
	r, _ := http.NewRequest("GET", "http://localhsot:8080", bytes.NewBuffer(body))
	w := httptest.NewRecorder()
	pathPrams := goweb.ParameterValueMap(make(map[string]string))
	cx := &goweb.Context{r, w, pathPrams, MSGPACK_FORMAT}

	// Create Decoder
	decoder := new(MsgpackRequestDecoder)

	var actual []int
	if err := decoder.Unmarshal(cx, &actual); err != nil {
		t.Error(err)
	}

	if len(expect) != len(actual) {
		t.Errorf("expect length of array is %d but actual is %d.", len(expect), len(actual))
	}

	for i := range expect {
		if expect[i] != actual[i] {
			t.Errorf("expect %dth element is %d but actual is %d", expect[i], actual[i])
			break
		}
	}
}
// Test of gowebmsgpack.MsgpackFormatter.Match().
func TestFormatterMatch(t *testing.T) {

	// Create and regist formatter
	formatter := new(MsgpackFormatter)
	goweb.AddFormatter(formatter)

	// Create context
	r, _ := http.NewRequest("GET", "http://localhsot:8080", nil)
	w := httptest.NewRecorder()
	pathPrams := goweb.ParameterValueMap(make(map[string]string))
	cx := &goweb.Context{r, w, pathPrams, MSGPACK_FORMAT}

	if !formatter.Match(cx) {
		t.Error("expect formatter.Match returns true but actual is false")
	}
}