1package com.android.launcher3.logging;
2
3import android.test.AndroidTestCase;
4import android.test.suitebuilder.annotation.SmallTest;
5
6import java.io.File;
7import java.io.PrintWriter;
8import java.io.StringWriter;
9import java.util.Calendar;
10
11/**
12 * Tests for {@link FileLog}
13 */
14@SmallTest
15public class FileLogTest extends AndroidTestCase {
16
17    private File mTempDir;
18
19    @Override
20    protected void setUp() throws Exception {
21        super.setUp();
22        int count = 0;
23        do {
24            mTempDir = new File(getContext().getCacheDir(), "log-test-" + (count++));
25        } while(!mTempDir.mkdir());
26
27        FileLog.setDir(mTempDir);
28    }
29
30    @Override
31    protected void tearDown() throws Exception {
32        // Clear existing logs
33        new File(mTempDir, "log-0").delete();
34        new File(mTempDir, "log-1").delete();
35        mTempDir.delete();
36        super.tearDown();
37    }
38
39    public void testPrintLog() throws Exception {
40        FileLog.print("Testing", "hoolalala");
41        StringWriter writer = new StringWriter();
42        FileLog.flushAll(new PrintWriter(writer));
43        assertTrue(writer.toString().contains("hoolalala"));
44
45        FileLog.print("Testing", "abracadabra", new Exception("cat! cat!"));
46        writer = new StringWriter();
47        FileLog.flushAll(new PrintWriter(writer));
48        assertTrue(writer.toString().contains("abracadabra"));
49        // Exception is also printed
50        assertTrue(writer.toString().contains("cat! cat!"));
51
52        // Old logs still present after flush
53        assertTrue(writer.toString().contains("hoolalala"));
54    }
55
56    public void testOldFileTruncated() throws Exception {
57        FileLog.print("Testing", "hoolalala");
58        StringWriter writer = new StringWriter();
59        FileLog.flushAll(new PrintWriter(writer));
60        assertTrue(writer.toString().contains("hoolalala"));
61
62        Calendar threeDaysAgo = Calendar.getInstance();
63        threeDaysAgo.add(Calendar.HOUR, -72);
64        new File(mTempDir, "log-0").setLastModified(threeDaysAgo.getTimeInMillis());
65        new File(mTempDir, "log-1").setLastModified(threeDaysAgo.getTimeInMillis());
66
67        FileLog.print("Testing", "abracadabra", new Exception("cat! cat!"));
68        writer = new StringWriter();
69        FileLog.flushAll(new PrintWriter(writer));
70        assertTrue(writer.toString().contains("abracadabra"));
71        // Exception is also printed
72        assertTrue(writer.toString().contains("cat! cat!"));
73
74        // Old logs have been truncated
75        assertFalse(writer.toString().contains("hoolalala"));
76    }
77}
78