diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java b/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java index eb7f9b2ea..867f706d3 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/TempFileCleaner.java @@ -25,7 +25,14 @@ import java.io.File; */ public class TempFileCleaner { + private long currentTimeMillis; + public TempFileCleaner() { + currentTimeMillis = System.currentTimeMillis(); + } + + public TempFileCleaner(long time) { + currentTimeMillis = time; } public void clean() { @@ -47,17 +54,20 @@ public class TempFileCleaner { + "tmp")); } - private void cleanTmpDirectory(File dir) { + // VisibleForTesting + protected int cleanTmpDirectory(File dir) { if (!dir.exists()) { - return; + return 0; } File[] list = dir.listFiles(); - long now = System.currentTimeMillis(); - long oldest = now - 1000 * 3600; + int count = 0; + long oldest = currentTimeMillis - 1000 * 3600; for (File f : list) { if (f.lastModified() < oldest) { f.delete(); + count++; } } + return count; } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/TempFileCleanerTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/TempFileCleanerTest.java new file mode 100644 index 000000000..93cfdf11d --- /dev/null +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/TempFileCleanerTest.java @@ -0,0 +1,84 @@ +/* + * Copyright 2010 Google Inc. + * + * 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.google.android.apps.mytracks.io; + +import static com.google.android.testing.mocking.AndroidMock.expect; +import com.google.android.testing.mocking.AndroidMock; +import com.google.android.testing.mocking.UsesMocks; + +import android.test.AndroidTestCase; + +import java.io.File; + +/** + * @author Sandor Dornbush + */ +public class TempFileCleanerTest extends AndroidTestCase { + + @UsesMocks({ + File.class, + }) + + public void test_noDir() { + File dir = AndroidMock.createMock(File.class, "/no_file"); + TempFileCleaner cleaner = new TempFileCleaner(); + expect(dir.exists()).andStubReturn(false); + AndroidMock.replay(dir); + assertEquals(0, cleaner.cleanTmpDirectory(dir)); + AndroidMock.verify(dir); + } + + public void test_emptyDir() { + File dir = AndroidMock.createMock(File.class, "/no_file"); + TempFileCleaner cleaner = new TempFileCleaner(); + expect(dir.exists()).andStubReturn(true); + expect(dir.listFiles()).andStubReturn(new File[0]); + AndroidMock.replay(dir); + assertEquals(0, cleaner.cleanTmpDirectory(dir)); + AndroidMock.verify(dir); + } + + public void test_newFile() { + File dir = AndroidMock.createMock(File.class, "/no_file"); + long now = 100000000; + TempFileCleaner cleaner = new TempFileCleaner(now); + expect(dir.exists()).andStubReturn(true); + File file = AndroidMock.createMock(File.class, "/no_file/foo"); + expect(file.lastModified()).andStubReturn(now); + File[] list = { file }; + expect(dir.listFiles()).andStubReturn(list); + + AndroidMock.replay(dir, file); + assertEquals(0, cleaner.cleanTmpDirectory(dir)); + AndroidMock.verify(dir, file); + } + + public void test_oldFile() { + File dir = AndroidMock.createMock(File.class, "/no_file"); + long now = 100000000; + TempFileCleaner cleaner = new TempFileCleaner(now); + expect(dir.exists()).andStubReturn(true); + File file = AndroidMock.createMock(File.class, "/no_file/foo"); + expect(file.lastModified()).andStubReturn(now - 3600001); + expect(file.delete()).andStubReturn(true); + File[] list = { file }; + expect(dir.listFiles()).andStubReturn(list); + + AndroidMock.replay(dir, file); + assertEquals(1, cleaner.cleanTmpDirectory(dir)); + AndroidMock.verify(dir, file); + } +}