1be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung/* 2be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * Copyright 2017 The Android Open Source Project 3be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * 4be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * Licensed under the Apache License, Version 2.0 (the "License"); 5be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * you may not use this file except in compliance with the License. 6be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * You may obtain a copy of the License at 7be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * 8be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * http://www.apache.org/licenses/LICENSE-2.0 9be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * 10be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * Unless required by applicable law or agreed to in writing, software 11be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * distributed under the License is distributed on an "AS IS" BASIS, 12be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * See the License for the specific language governing permissions and 14be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung * limitations under the License. 15be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung */ 16be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 17be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung//#define LOG_NDEBUG 0 18be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung#define LOG_TAG "audio_utils_errorlog_tests" 19be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 20be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung#include <audio_utils/SimpleLog.h> 21be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung#include <gtest/gtest.h> 22be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung#include <iostream> 23be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung#include <log/log.h> 24be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 25be289a8327b6a96517fd063329dc21a08442ce6dAndy Hungusing namespace android; 26be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 27be289a8327b6a96517fd063329dc21a08442ce6dAndy Hungstatic size_t countNewLines(const std::string &s) { 28be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung return std::count(s.begin(), s.end(), '\n'); 29be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung} 30be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 31be289a8327b6a96517fd063329dc21a08442ce6dAndy HungTEST(audio_utils_simplelog, basic) { 32be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung auto slog = std::make_unique<SimpleLog>(); 33be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung const int64_t oneSecond = 1000000000; 34be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 35be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung EXPECT_EQ((size_t)0, countNewLines(slog->dumpToString())); 36be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 37be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung const int nine = 9; 38be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->log("Hello %d", nine); 39be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->log("World"); 40be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 41be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // two lines (no header) 42be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung EXPECT_EQ((size_t)2, countNewLines(slog->dumpToString())); 43be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 44be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // another two lines (this is out of time order, but the log doesn't care) 45be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->log(oneSecond /* nowNs */, "Hello World %d", 10); 46be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->log(oneSecond * 2 /* nowNs */, "%s", "Goodbye"); 47be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 48be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung EXPECT_EQ((size_t)4, countNewLines(slog->dumpToString())); 49be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 50be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // truncate on lines 51be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung EXPECT_EQ((size_t)1, countNewLines(slog->dumpToString("" /* prefix */, 1 /* lines */))); 52be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 53be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // truncate on time 54be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung EXPECT_EQ((size_t)4, countNewLines( 55be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->dumpToString("" /* prefix */, 0 /* lines */, oneSecond /* limitNs */))); 56be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 57be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // truncate on time (more) 58be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung EXPECT_EQ((size_t)3, countNewLines( 59be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->dumpToString("" /* prefix */, 0 /* lines */, oneSecond * 2 /* limitNs */))); 60be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 61be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // truncate on time (more) 62be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung EXPECT_EQ((size_t)2, countNewLines( 63be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->dumpToString("" /* prefix */, 0 /* lines */, oneSecond * 2 + 1 /* limitNs */))); 64be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 65be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung std::cout << slog->dumpToString() << std::flush; 66be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 67be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung slog->dump(0 /* fd (stdout) */, " "); // add a prefix 68be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 69be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // The output below depends on the local time zone and current time. 70be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung // The indentation below is exact, check alignment. 71be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung /* 72be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung03-27 14:47:43.567 Hello 9 73be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung03-27 14:47:43.567 World 74be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung12-31 16:00:01.000 Hello World 10 75be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung12-31 16:00:02.000 Goodbye 76be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 03-27 14:47:43.567 Hello 9 77be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 03-27 14:47:43.567 World 78be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 12-31 16:00:01.000 Hello World 10 79be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung 12-31 16:00:02.000 Goodbye 80be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung */ 81be289a8327b6a96517fd063329dc21a08442ce6dAndy Hung} 82