Use Kyro serializer in tests, to cover variable length encoding if the serializer happens to use them.
Use Kyro serializer in tests, to cover variable length encoding if the serializer happens to use them.

/*
 * Copyright 2013 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.gradle.messaging.serialize

import org.gradle.messaging.serialize.kryo.KryoBackedDecoder
import org.gradle.messaging.serialize.kryo.KryoBackedEncoder
import spock.lang.Specification

class SerializerSpec extends Specification {
    def serialize(def value, Serializer serializer) {
        def bytes = toBytes(value, serializer)
        return fromBytes(bytes, serializer)
    }

    def fromBytes(def bytes, Serializer serializer) {
        return serializer.read(new KryoBackedDecoder(new ByteArrayInputStream(bytes)))
    }

    def toBytes(def value, Serializer serializer) {
        def bytes = new ByteArrayOutputStream()
        def encoder = new KryoBackedEncoder(bytes)
        serializer.write(encoder, value)
        encoder.flush()

        return bytes.toByteArray()
    }
}

/*
 * Copyright 2013 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.gradle.messaging.serialize

import spock.lang.Specification

class SerializerSpec extends Specification {
    def serialize(def value, Serializer serializer) {
        def bytes = toBytes(value, serializer)
        return serializer.read(new InputStreamBackedDecoder(new ByteArrayInputStream(bytes)))
    }

    def fromBytes(def bytes, Serializer serializer) {
        return serializer.read(new InputStreamBackedDecoder(new ByteArrayInputStream(bytes)))
    }

    def toBytes(def value, Serializer serializer) {
        def bytes = new ByteArrayOutputStream()
        def encoder = new OutputStreamBackedEncoder(bytes)
        serializer.write(encoder, value)
        encoder.flush()

        return bytes.toByteArray()
    }
}
