public void Compress_ObjectsWithDifferentContent_HaveDifferentResultBytes()
        {
            var subject1 = (string)new Word();
            var subject2 = (string)new Word();
            var provider = new CompressionProvider();

            var result1 = provider.Compress(subject1);
            var result2 = provider.Compress(subject2);

            CollectionAssert.AreNotEquivalent(result1, result2);
        }
        public void Compress_CompressedContentSize_IsLessThanOriginal()
        {
            var subject = string.Join(
                " ",
                Enumerable.Range(0, 5).Select(_ => new Paragraph(Tongue.Babylonian))
                );
            var provider = new CompressionProvider();

            var result = provider.Compress(subject);

            Assert.Less(result.Length, subject.Length);
        }
        protected Message SerializeReplyInternal(MessageVersion messageVersion, object[] parameters, object result)
        {
            var retParamInfo = ParameterTypes.FirstOrDefault(x => x.ParamType == ParamType.Return);

            //if (retParamInfo == null)
            //    throw new InvalidOperationException("The return parameter type was not found.");

            var compressionType = DefaultCompressionType;

            Func <string[]> valueGetter = () =>
            {
                if (retParamInfo == null)
                {
                    return(new string[0]);
                }

                var modelProvider = ObjectBuilder.GetModelProvider();

                var model = modelProvider.CreateModelInfo(retParamInfo.Type, ModeType.Wcf);

                var serializer = ObjectBuilder.GetSerializer();

                var data = (serializer.Serialize(result, model.MetaData, ModeType.Wcf) ??
                            new SerializationResult(new byte[0], null)).Data;

                if (compressionType != CompressionTypeOptions.None)
                {
                    var compressionProvider = new CompressionProvider();

                    data = compressionProvider.Compress(data, compressionType);
                }

                var value = BinaryConverter.ToString(data);

                return(new[] { value });
            };

            var message = Message.CreateMessage(messageVersion, ContractInfo.Action + "Response",
                                                new ProtoBodyWriter(ContractInfo.OperationContractName, ContractInfo.ServiceNamespace,
                                                                    valueGetter));

            if (compressionType != CompressionTypeOptions.None)
            {
                AddCompressionHeader(message, DefaultCompressionType);
            }

            return(message);
        }
        public void CompressDecompress_ResultingAndOriginalObject_AreEquivalent()
        {
            var subject = new
            {
                String = "√abcdef€z$*%´´ràéµ£",
                List   = new[]
                {
                    123, 456
                },
                Object = new { Value = 123 }
            }.ToJson();
            var provider = new CompressionProvider();

            var result = provider.Decompress(provider.Compress(subject));

            Assert.AreEqual(subject, result);
        }