1c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller/* 2c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * Copyright (C) 2014 Square, Inc. 3c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * 4c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * Licensed under the Apache License, Version 2.0 (the "License"); 5c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * you may not use this file except in compliance with the License. 6c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * You may obtain a copy of the License at 7c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * 8c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * http://www.apache.org/licenses/LICENSE-2.0 9c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * 10c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * Unless required by applicable law or agreed to in writing, software 11c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * distributed under the License is distributed on an "AS IS" BASIS, 12c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * See the License for the specific language governing permissions and 14c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller * limitations under the License. 15c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller */ 16c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerpackage okio; 17c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 18c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport java.io.IOException; 19c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport java.util.ArrayList; 20c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport java.util.Arrays; 21c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport java.util.LinkedHashMap; 22c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport java.util.List; 23c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport java.util.Map; 24c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 25c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport static org.junit.Assert.assertEquals; 26c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerimport static org.junit.Assert.assertTrue; 27c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 28c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller/** A scriptable sink. Like Mockito, but worse and requiring less configuration. */ 29c6bd683320121544811f481709b3fdbcbe9b3866Neil Fullerclass MockSink implements Sink { 30c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller private final List<String> log = new ArrayList<String>(); 31c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller private final Map<Integer, IOException> callThrows = new LinkedHashMap<Integer, IOException>(); 32c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 33c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller public void assertLog(String... messages) { 34c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertEquals(Arrays.asList(messages), log); 35c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 36c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 37c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller public void assertLogContains(String message) { 38c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller assertTrue(log.contains(message)); 39c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 40c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 41c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller public void scheduleThrow(int call, IOException e) { 42c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller callThrows.put(call, e); 43c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 44c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 45c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller private void throwIfScheduled() throws IOException { 46c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller IOException exception = callThrows.get(log.size() - 1); 47c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller if (exception != null) throw exception; 48c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 49c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 50c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller @Override public void write(OkBuffer source, long byteCount) throws IOException { 51c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller log.add("write(" + source + ", " + byteCount + ")"); 52c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller source.skip(byteCount); 53c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller throwIfScheduled(); 54c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 55c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 56c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller @Override public void flush() throws IOException { 57c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller log.add("flush()"); 58c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller throwIfScheduled(); 59c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 60c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 61c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller @Override public Sink deadline(Deadline deadline) { 62c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller log.add("deadline()"); 63c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller return this; 64c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 65c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller 66c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller @Override public void close() throws IOException { 67c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller log.add("close()"); 68c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller throwIfScheduled(); 69c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller } 70c6bd683320121544811f481709b3fdbcbe9b3866Neil Fuller} 71