1de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi/* 2de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * Copyright (C) 2016 The Android Open Source Project 3de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * 4de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * Licensed under the Apache License, Version 2.0 (the "License"); 5de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * you may not use this file except in compliance with the License. 6de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * You may obtain a copy of the License at 7de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * 8de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * http://www.apache.org/licenses/LICENSE-2.0 9de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * 10de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * Unless required by applicable law or agreed to in writing, software 11de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * distributed under the License is distributed on an "AS IS" BASIS, 12de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * See the License for the specific language governing permissions and 14de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi * limitations under the License. 15de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi */ 16de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 17de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichipackage android.util; 18de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 19de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichiimport junit.framework.TestCase; 20de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 21de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichiimport java.io.PrintWriter; 22de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichiimport java.io.StringWriter; 23de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichiimport java.util.Arrays; 24de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichiimport java.util.Collections; 25de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichiimport java.util.List; 26de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 27de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 28de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichipublic class LocalLogTest extends TestCase { 29de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 30de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi public void testA() { 31de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String[] lines = { 32de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "foo", 33de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "bar", 34de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "baz" 35de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi }; 36de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String[] want = lines; 37de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi testcase(new LocalLog(10), lines, want); 38de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 39de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 40de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi public void testB() { 41de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String[] lines = { 42de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "foo", 43de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "bar", 44de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "baz" 45de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi }; 46de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String[] want = {}; 47de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi testcase(new LocalLog(0), lines, want); 48de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 49de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 50de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi public void testC() { 51de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String[] lines = { 52de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "dropped", 53de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "dropped", 54de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "dropped", 55de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "dropped", 56de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "dropped", 57de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "dropped", 58de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "foo", 59de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "bar", 60de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "baz", 61de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi }; 62de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String[] want = { 63de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "foo", 64de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "bar", 65de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi "baz", 66de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi }; 67de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi testcase(new LocalLog(3), lines, want); 68de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 69de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 70de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi void testcase(LocalLog logger, String[] input, String[] want) { 71de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi for (String l : input) { 72de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi logger.log(l); 73de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 74de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi verifyAllLines(want, dump(logger).split("\n")); 75de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi verifyAllLines(reverse(want), reverseDump(logger).split("\n")); 76de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 77de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 78de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi void verifyAllLines(String[] wantLines, String[] gotLines) { 79de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi for (int i = 0; i < wantLines.length; i++) { 80de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String want = wantLines[i]; 81de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String got = gotLines[i]; 82de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi String msg = String.format("%s did not contain %s", quote(got), quote(want)); 83de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi assertTrue(msg, got.contains(want)); 84de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 85de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 86de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 87de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi static String dump(LocalLog logger) { 88de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi StringWriter buffer = new StringWriter(); 89de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi PrintWriter writer = new PrintWriter(buffer); 90de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi logger.dump(null, writer, new String[0]); 91de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi return buffer.toString(); 92de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 93de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 94de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi static String reverseDump(LocalLog logger) { 95de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi StringWriter buffer = new StringWriter(); 96de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi PrintWriter writer = new PrintWriter(buffer); 97de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi logger.reverseDump(null, writer, new String[0]); 98de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi return buffer.toString(); 99de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 100de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 101de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi static String quote(String s) { 102de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi return '"' + s + '"'; 103de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 104de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi 105de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi static String[] reverse(String[] ary) { 106de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi List<String> ls = Arrays.asList(ary); 107de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi Collections.reverse(ls); 108de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi return ls.toArray(new String[ary.length]); 109de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi } 110de310dba78fa7cd60ad01cefa7fadb6d48fffcaaHugo Benichi} 111