blob: 0b0d63efcb0b68379029177f2ff170f54e844434 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package tests
import (
"testing"
"mojo/public/go/bindings"
)
func checkMessageEncoding(t *testing.T, header, payload bindings.MessageHeader) {
var encodedMessage, decodedMessage *bindings.Message
var err error
var decodedHeader, decodedPayload bindings.MessageHeader
if encodedMessage, err = bindings.EncodeMessage(header, &payload); err != nil {
t.Fatalf("Failed encoding message: %v", err)
}
if decodedMessage, err = bindings.ParseMessage(encodedMessage.Bytes, nil); err != nil {
t.Fatalf("Failed decoding message header: %v", err)
}
if decodedHeader = decodedMessage.Header; decodedHeader != header {
t.Fatalf("Unexpected header decoded: got %v, want %v", decodedHeader, header)
}
if err = decodedMessage.DecodePayload(&decodedPayload); err != nil {
t.Fatalf("Failed decoding message payload: %v", err)
}
if decodedPayload != payload {
t.Fatalf("Unexpected header with request id decoded: got %v, want %v", decodedPayload, payload)
}
}
// TestMessageHeader tests that headers are identical after being
// encoded/decoded.
func TestMessageHeader(t *testing.T) {
header := bindings.MessageHeader{2, 0, 0}
headerWithId := bindings.MessageHeader{1, 2, 3}
checkMessageEncoding(t, header, headerWithId)
checkMessageEncoding(t, headerWithId, header)
headerWithZeroId := bindings.MessageHeader{1, 2, 0}
checkMessageEncoding(t, headerWithZeroId, header)
}