1573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal/*
2573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Copyright (C) 2016 The Android Open Source Project
3573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal *
4573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Licensed under the Apache License, Version 2.0 (the "License");
5573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * you may not use this file except in compliance with the License.
6573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * You may obtain a copy of the License at
7573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal *
8573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal *      http://www.apache.org/licenses/LICENSE-2.0
9573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal *
10573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Unless required by applicable law or agreed to in writing, software
11573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * distributed under the License is distributed on an "AS IS" BASIS,
12573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * See the License for the specific language governing permissions and
14573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * limitations under the License.
15573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */
16573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
17573de1504ea684a2a647613659d4771c2a315eeamukesh agrawalpackage com.android.server.wifi;
18573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
19573de1504ea684a2a647613659d4771c2a315eeamukesh agrawalimport static org.junit.Assert.assertEquals;
20573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
21573de1504ea684a2a647613659d4771c2a315eeamukesh agrawalimport android.test.suitebuilder.annotation.SmallTest;
22573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
23573de1504ea684a2a647613659d4771c2a315eeamukesh agrawalimport org.junit.Before;
24573de1504ea684a2a647613659d4771c2a315eeamukesh agrawalimport org.junit.Test;
25573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
26573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal/**
27573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal * Unit tests for {@link LogcatLog}.
28573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal */
29573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal@SmallTest
30573de1504ea684a2a647613659d4771c2a315eeamukesh agrawalpublic class LogcatLogTest {
31573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    private static final String TAG = "LogcatLogTest";
32573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    private LogcatLog mLogger;
33573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
34573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Initializes test fixture. */
35573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Before
36573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void setUp() {
37573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        mLogger = new LogcatLog(TAG);
38573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
39573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
40573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
41573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogcatLog's LogMessage implementation correctly
42573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * handles a format with no parameters.
43573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     *
44573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Note: In practice, we expect clients to use eC() and friends
45573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * when the message is a literal. But we still want to make sure
46573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * this functionality works.
47573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
48573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
49573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithParameterlessFormat() {
50573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("hello world");
51573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
52573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("hello world", logMessage.toString());
53573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
54573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
55573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works with an empty format. */
56573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
57573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithEmptyFormat() {
58573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("");
59573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
60573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("", logMessage.toString());
61573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
62573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
63573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works with a value-only format. */
64573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
65573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithValueOnly() {
66573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%");
67573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c(1).flush();
68573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("1", logMessage.toString());
69573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
70573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
71573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
72573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage works when the placeholder is replaced
73573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * by the placeholder character.
74573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
75573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
76573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageIsNotConfusedByPlaceholderInValue() {
77573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%");
78573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c('%').flush();
79573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("%", logMessage.toString());
80573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
81573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
82573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works when a value is at the start of the format. */
83573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
84573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithValueAtBegin() {
85573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%stuff");
86573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c(1).flush();
87573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("1stuff", logMessage.toString());
88573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
89573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
90573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works when a value is in the middle of the format. */
91573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
92573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithValueInMiddle() {
93573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("s%uff");
94573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c(1).flush();
95573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("s1uff", logMessage.toString());
96573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
97573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
98573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works when a value is at the end of the format. */
99573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
100573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithValueAtEnd() {
101573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("stuff%");
102573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c(1).flush();
103573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("stuff1", logMessage.toString());
104573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
105573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
106573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works when a format has multiple values. */
107573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
108573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithMultipleValues() {
109573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("% %");
110573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("hello").c("world").flush();
111573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("hello world", logMessage.toString());
112573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
113573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
114573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works when a format has multiple values and literals. */
115573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
116573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithMultipleValuesAndLiterals() {
117573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("first:% second:%");
118573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("hello").c("world").flush();
119573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("first:hello second:world", logMessage.toString());
120573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
121573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
122573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage works when a format has multiple adjacent values. */
123573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
124573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageWorksWithAdjacentValues() {
125573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%%");
126573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("hello").c("world").flush();
127573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("helloworld", logMessage.toString());
128573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
129573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
130573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage silently ignores extraneous values. */
131573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
132573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageSilentlyIgnoresExtraneousValues() {
133573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%");
134573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("hello world");
135573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("more stuff");
136573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
137573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("hello world", logMessage.toString());
138573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
139573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
140573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
141573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage silently ignores extraneous values,
142573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * even with an empty format string.
143573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
144573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
145573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageSilentlyIgnoresExtraneousValuesEvenForEmptyFormat() {
146573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("");
147573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("hello world");
148573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("more stuff");
149573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
150573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("", logMessage.toString());
151573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
152573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
153573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
154573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage silently ignores extraneous values,
155573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * even if the format string is all literals.
156573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
157573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
158573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageSilentlyIgnoresExtraneousValuesEvenForFormatWithoutPlaceholders() {
159573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("literal format");
160573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("hello world");
161573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("more stuff");
162573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
163573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("literal format", logMessage.toString());
164573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
165573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
166573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage copies an unused placeholder to output. */
167573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
168573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageCopiesUnusedPlaceholderToOutput() {
169573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%");
170573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
171573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("%", logMessage.toString());
172573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
173573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
174573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage copies multiple unused placeholders to output. */
175573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
176573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageCopiesMultipleUnusedPlaceholdersToOutput() {
177573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%%%%%");
178573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
179573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("%%%%%", logMessage.toString());
180573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
181573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
182573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
183573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage copies an unused placeholder to output,
184573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * even if preceded by non-placeholders.
185573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
186573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
187573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageCopiesUnusedPlaceholderAtEndToOutput() {
188573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("foo%");
189573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
190573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("foo%", logMessage.toString());
191573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
192573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
193573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
194573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage copies an unused placeholder to output,
195573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * even if followed by non-placeholders.
196573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
197573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
198573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageCopiesUnusedPlaceholderAtBeginToOutput() {
199573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%foo");
200573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
201573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("%foo", logMessage.toString());
202573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
203573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
204573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
205573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage copies an unused placeholder to output,
206573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * even if it is in the middle of non-placeholders.
207573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
208573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
209573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageCopiesUnusedPlaceholderInMiddleToOutput() {
210573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("f%o");
211573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
212573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("f%o", logMessage.toString());
213573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
214573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
215573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
216573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage copies multiple unused placeholders to output,
217573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * even if they are embedded amongst non-placeholders.
218573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
219573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
220573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessageCopiesUnusedPlaceholdersInMiddleToOutput() {
221573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("f%o%o%d");
222573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
223573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("f%o%o%d", logMessage.toString());
224573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
225573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
226573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /**
227573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Verifies that LogMessage preserves meta-characters in format string.
228573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     *
229573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * Note that we deliberately test only the meta-characters that we
230573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * expect to find in log messages. (Newline might also be
231573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * preserved, but clients shouldn't depend on that, as messages
232573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     * that have newlines make logs hard to read.)
233573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal     */
234573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
235573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessagePreservesMetaCharactersInFormat() {
236573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("\\hello\tworld\\");
237573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.flush();
238573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("\\hello\tworld\\", logMessage.toString());
239573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
240573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
241573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage propagates meta-characters in char values. */
242573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
243573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessagePropagatesMetaCharactersInCharValues() {
244573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("hello%big%world");
245573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c('\t').c('\\').flush();
246573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("hello\tbig\\world", logMessage.toString());
247573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
248573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal
249573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    /** Verifies that LogMessage propagates meta-characters in String values. */
250573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    @Test
251573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    public void logMessagePropagatesMetaCharactersInStringValues() {
252573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        WifiLog.LogMessage logMessage = mLogger.err("%%world");
253573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        logMessage.c("hello\t").c("big\\").flush();
254573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal        assertEquals("hello\tbig\\world", logMessage.toString());
255573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal    }
256573de1504ea684a2a647613659d4771c2a315eeamukesh agrawal}
257