#!/usr/bin/env python2.7 -B import logs import ps import datetime import StringIO def test_empty(): """Test parsing no tag and no text, not well formed.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "", "") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/ ] """ check_parsing(expected, text) def test_none(): """Test parsing no tag and no text.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "", "") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/ ] """ check_parsing(expected, text) def test_trailing_blank(): """Test parsing text containing an extra intended newline at the end.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", "Newline after\n") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] Newline after """ check_parsing(expected, text) def test_blank_between(): """Test parsing text containing a newline in the middle.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", "Message\n\nNewline between") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] Message Newline between """ check_parsing(expected, text) def test_preceeding_blank(): """Test parsing text containing a newline then text.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", "\nNewline before") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] Newline before """ check_parsing(expected, text) def test_one_blank(): """Test parsing text one blank line.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", "\n") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] """ check_parsing(expected, text) def test_two_blanks(): """Test parsing text two blank lines.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", "\n\n") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] """ check_parsing(expected, text) def test_two_lines_noblanks(): """Test parsing two lines of text with no blank lines.""" expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", "One\nTwo") ] text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] One Two """ check_parsing(expected, text) def test_chatty(): """Test a log with chatty identical messages.""" expected = [ logs.LogLine("system", "03-29 00:46:58.857", "1000", "1815", "1816", "I", "Noisy", "Message"), logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"), logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"), logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"), logs.LogLine("system", "03-29 00:46:58.859", "1000", "1815", "1816", "I", "Noisy", "Message"), ] text = """--------- beginning of system [ 03-29 00:46:58.857 1000: 1815: 1816 I/Noisy ] Message [ 03-29 00:46:58.858 1000: 1815: 1816 I/chatty ] uid=1000(system) Thread-6 identical 3 lines [ 03-29 00:46:58.859 1000: 1815: 1816 I/Noisy ] Message """ check_parsing(expected, text) def test_normal(): """Test a realistic (albeit short) log.""" expected = [ logs.LogLine("system", "03-29 00:46:58.857", "1000", "1815", "1816", "I", "Package: ]Manager", "/system/app/KeyChain changed; collecting certs"), logs.LogLine("system", "03-29 00:46:58.872", "1000", "1815", "1816", "I", "PackageManager", "/system/app/HiddenMenu changed; collecting certs"), logs.LogLine("main", "03-29 00:46:58.872", "1000", "1815", "1816", "I", "PackageManager", "/system/app/HiddenMenu changed; collecting certs"), ] text = """--------- beginning of system [ 03-29 00:46:58.857 1000: 1815: 1816 I/Package: ]Manager ] /system/app/KeyChain changed; collecting certs [ 03-29 00:46:58.872 1000: 1815: 1816 I/PackageManager ] /system/app/HiddenMenu changed; collecting certs --------- switch to main [ 03-29 00:46:58.872 1000: 1815: 1816 I/PackageManager ] /system/app/HiddenMenu changed; collecting certs """ check_parsing(expected, text) def check_parsing(expected, text): """Parse the text and see if it parsed as expected.""" processes = ps.ProcessSet() result = [x for x in logs.ParseLogcat(StringIO.StringIO(text), processes)] if result != expected: raise Exception("test failed.\nexpected:\n[%s]\nactual\n[%s]" % ( ", ".join([str(r) for r in expected]), ", ".join([str(r) for r in result]))) def main(): test_empty() test_none() test_trailing_blank() test_blank_between() test_preceeding_blank() test_one_blank() test_two_blanks() test_chatty() test_normal() if __name__ == "__main__": main() # vim: set ts=2 sw=2 sts=2 tw=100 nocindent autoindent smartindent expandtab: