/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.dump import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import java.io.PrintWriter import java.io.StringWriter @SmallTest class DumpsysTableLoggerTest : SysuiTestCase() { private val logger = DumpsysTableLogger( TEST_SECTION_NAME, TEST_COLUMNS, TEST_DATA_VALID) private val stringWriter = StringWriter() private val printWriter = PrintWriter(stringWriter) @Before fun setup() { } @Test fun testTableLogger_header() { logger.printTableData(printWriter) val lines = logLines(stringWriter) val line1 = lines[0] assertEquals("table logger header is incorrect", HEADER_PREFIX + TEST_SECTION_NAME, line1) } @Test fun testTableLogger_version() { logger.printTableData(printWriter) val lines = logLines(stringWriter) val line2 = lines[1] assertEquals("version probably shouldn't have changed", "version $VERSION", line2) } @Test fun testTableLogger_footer() { logger.printTableData(printWriter) val lines = logLines(stringWriter) val footer = lines.last() android.util.Log.d("evanevan", footer) android.util.Log.d("evanevan", lines.toString()) assertEquals("table logger footer is incorrect", FOOTER_PREFIX + TEST_SECTION_NAME, footer) } @Test fun testTableLogger_data_length() { logger.printTableData(printWriter) val lines = logLines(stringWriter) // Header is 2 lines long, plus a line for the column defs so data is lines[3..last()-1] val data = lines.subList(3, lines.size - 1) assertEquals(TEST_DATA_LENGTH, data.size) } @Test fun testTableLogger_data_columns() { logger.printTableData(printWriter) val lines = logLines(stringWriter) // Header is always 2 lines long so data is lines[2..last()-1] val data = lines.subList(3, lines.size - 1) data.forEach { dataLine -> assertEquals(TEST_COLUMNS.size, dataLine.split(SEPARATOR).size) } } @Test fun testInvalidLinesAreFiltered() { // GIVEN an invalid data row, by virtue of having an extra field val invalidLine = List(TEST_COLUMNS.size) { col -> "data${col}X" } + "INVALID COLUMN" val invalidData = TEST_DATA_VALID.toMutableList().also { it.add(invalidLine) } // WHEN the table logger is created and asked to print the table val tableLogger = DumpsysTableLogger( TEST_SECTION_NAME, TEST_COLUMNS, invalidData) tableLogger.printTableData(printWriter) // THEN the invalid line is filtered out val invalidString = invalidLine.joinToString(separator = SEPARATOR) val logString = stringWriter.toString() assertThat(logString).doesNotContain(invalidString) } private fun logLines(sw: StringWriter): List { return sw.toString().split("\n").filter { it.isNotBlank() } } } // Copying these here from [DumpsysTableLogger] so that we catch any accidental versioning change private const val HEADER_PREFIX = "SystemUI TableSection START: " private const val FOOTER_PREFIX = "SystemUI TableSection END: " private const val SEPARATOR = "|" // TBD private const val VERSION = "1" const val TEST_SECTION_NAME = "TestTableSection" const val TEST_DATA_LENGTH = 5 val TEST_COLUMNS = arrayListOf("col1", "col2", "col3") val TEST_DATA_VALID = List(TEST_DATA_LENGTH) { row -> List(TEST_COLUMNS.size) { col -> "data$col$row" } }