1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.juneau.utest.utils;
18
19 import java.io.*;
20 import java.util.*;
21 import java.util.function.*;
22
23 import org.apache.juneau.common.utils.*;
24 import org.apache.juneau.serializer.*;
25
26 /**
27 * Utility class for creating mocked stream serializers.
28 */
29 public class FakeStreamSerializer extends OutputStreamSerializer {
30
31 //-------------------------------------------------------------------------------------------------------------------
32 // Static
33 //-------------------------------------------------------------------------------------------------------------------
34
35 public static Builder create() {
36 return new Builder();
37 }
38
39 //-------------------------------------------------------------------------------------------------------------------
40 // Builder
41 //-------------------------------------------------------------------------------------------------------------------
42
43 public static class Builder extends OutputStreamSerializer.Builder {
44 BiFunction<SerializerSession,Object,byte[]> function = (s,o) -> Utils.s(o).getBytes();
45 Function<SerializerSession,Map<String,String>> headers = s -> Collections.emptyMap();
46
47 public Builder function(BiFunction<SerializerSession,Object,byte[]> function) {
48 this.function = function;
49 return this;
50 }
51
52 public Builder headers(Function<SerializerSession,Map<String,String>> headers) {
53 this.headers = headers;
54 return this;
55 }
56
57 @Override
58 public Builder produces(String value) {
59 super.produces(value);
60 return this;
61 }
62
63 @Override
64 public Builder accept(String value) {
65 super.accept(value);
66 return this;
67 }
68
69 @Override
70 public Builder copy() {
71 return this;
72 }
73 }
74
75 //-------------------------------------------------------------------------------------------------------------------
76 // Instance
77 //-------------------------------------------------------------------------------------------------------------------
78
79 private final BiFunction<SerializerSession,Object,byte[]> function;
80
81 public FakeStreamSerializer(Builder builder) {
82 super(builder);
83 function = builder.function;
84 }
85
86 @Override /* SerializerSession */
87 protected void doSerialize(SerializerSession session, SerializerPipe out, Object o) throws IOException, SerializeException {
88 out.getOutputStream().write(function.apply(session, o));
89 }
90 }