mirror of https://github.com/kurisufriend/Clover
Conflicts: Clover/app/src/main/java/org/floens/chan/ChanApplication.java Clover/app/src/main/java/org/floens/chan/core/manager/ReplyManager.java Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.javafiltering
commit
de59ff1a63
@ -0,0 +1,304 @@ |
||||
/* |
||||
* Clover - 4chan browser https://github.com/Floens/Clover/
|
||||
* Copyright (C) 2014 Floens |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
package org.floens.chan.test; |
||||
|
||||
import android.app.Activity; |
||||
import android.os.Bundle; |
||||
import android.os.Handler; |
||||
import android.os.Looper; |
||||
import android.view.View; |
||||
import android.widget.Button; |
||||
import android.widget.LinearLayout; |
||||
|
||||
import com.android.volley.VolleyError; |
||||
|
||||
import org.floens.chan.ChanApplication; |
||||
import org.floens.chan.core.loader.ChanLoader; |
||||
import org.floens.chan.core.model.ChanThread; |
||||
import org.floens.chan.core.model.Loadable; |
||||
import org.floens.chan.core.model.Post; |
||||
import org.floens.chan.utils.FileCache; |
||||
import org.floens.chan.utils.Logger; |
||||
import org.floens.chan.utils.ThemeHelper; |
||||
|
||||
import java.io.File; |
||||
|
||||
// Poor mans unit testing.
|
||||
// Move to proper unit testing when the gradle plugin fully supports it.
|
||||
public class TestActivity extends Activity implements View.OnClickListener { |
||||
private static final String TAG = "FileCacheTest"; |
||||
private final Handler handler = new Handler(Looper.getMainLooper()); |
||||
|
||||
private Button clearCache; |
||||
private Button stats; |
||||
private Button simpleTest; |
||||
private Button cacheTest; |
||||
private Button timeoutTest; |
||||
|
||||
private FileCache fileCache; |
||||
|
||||
@Override |
||||
public void onCreate(Bundle savedInstanceState) { |
||||
super.onCreate(savedInstanceState); |
||||
|
||||
ThemeHelper.getInstance().reloadPostViewColors(this); |
||||
|
||||
LinearLayout linearLayout = new LinearLayout(this); |
||||
linearLayout.setOrientation(LinearLayout.VERTICAL); |
||||
|
||||
clearCache = new Button(this); |
||||
clearCache.setText("Clear cache"); |
||||
clearCache.setOnClickListener(this); |
||||
linearLayout.addView(clearCache); |
||||
|
||||
stats = new Button(this); |
||||
stats.setText("Stats"); |
||||
stats.setOnClickListener(this); |
||||
linearLayout.addView(stats); |
||||
|
||||
simpleTest = new Button(this); |
||||
simpleTest.setText("Test download and cancel"); |
||||
simpleTest.setOnClickListener(this); |
||||
linearLayout.addView(simpleTest); |
||||
|
||||
cacheTest = new Button(this); |
||||
cacheTest.setText("Test cache size"); |
||||
cacheTest.setOnClickListener(this); |
||||
linearLayout.addView(cacheTest); |
||||
|
||||
timeoutTest = new Button(this); |
||||
timeoutTest.setText("Test multiple parallel"); |
||||
timeoutTest.setOnClickListener(this); |
||||
linearLayout.addView(timeoutTest); |
||||
|
||||
setContentView(linearLayout); |
||||
|
||||
File cacheDir = getExternalCacheDir() != null ? getExternalCacheDir() : getCacheDir(); |
||||
File fileCacheDir = new File(cacheDir, "filecache"); |
||||
fileCache = new FileCache(fileCacheDir, 50 * 1024 * 1024, ChanApplication.getInstance().getUserAgent()); |
||||
} |
||||
|
||||
@Override |
||||
public void onClick(View v) { |
||||
if (v == clearCache) { |
||||
clearCache(); |
||||
} else if (v == stats) { |
||||
stats(); |
||||
} else if (v == simpleTest) { |
||||
testDownloadAndCancel(); |
||||
} else if (v == cacheTest) { |
||||
testCache(); |
||||
} else if (v == timeoutTest) { |
||||
testTimeout(); |
||||
} |
||||
} |
||||
|
||||
public void clearCache() { |
||||
fileCache.clearCache(); |
||||
} |
||||
|
||||
public void stats() { |
||||
fileCache.logStats(); |
||||
} |
||||
|
||||
public void testDownloadAndCancel() { |
||||
// 1.9MB file of the clover Logger.i(TAG,
|
||||
final String testImage = "http://a.pomf.se/ndbolc.png"; |
||||
final File cacheFile = fileCache.get(testImage); |
||||
|
||||
Logger.i(TAG, "Downloading " + testImage); |
||||
final FileCache.FileCacheDownloader downloader = fileCache.downloadFile(testImage, new FileCache.DownloadedCallback() { |
||||
@Override |
||||
public void onProgress(long downloaded, long total, boolean done) { |
||||
Logger.i(TAG, "onProgress " + downloaded + "/" + total + " " + done); |
||||
} |
||||
|
||||
@Override |
||||
public void onSuccess(File file) { |
||||
Logger.i(TAG, "onSuccess " + file.exists()); |
||||
} |
||||
|
||||
@Override |
||||
public void onFail(boolean notFound) { |
||||
Logger.i(TAG, "onFail Cachefile exists() = " + cacheFile.exists()); |
||||
} |
||||
}); |
||||
|
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
fileCache.downloadFile(testImage, new FileCache.DownloadedCallback() { |
||||
@Override |
||||
public void onProgress(long downloaded, long total, boolean done) { |
||||
Logger.i(TAG, "2nd progress " + downloaded + "/" + total); |
||||
} |
||||
|
||||
@Override |
||||
public void onSuccess(File file) { |
||||
Logger.i(TAG, "2nd onSuccess " + file.exists()); |
||||
} |
||||
|
||||
@Override |
||||
public void onFail(boolean notFound) { |
||||
Logger.i(TAG, "2nd onFail Cachefile exists() = " + cacheFile.exists()); |
||||
} |
||||
}); |
||||
} |
||||
}, 200); |
||||
|
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
Logger.i(TAG, "Cancelling download!"); |
||||
downloader.cancel(); |
||||
} |
||||
}, 500); |
||||
|
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
Logger.i(TAG, "File exists() = " + cacheFile.exists()); |
||||
} |
||||
}, 600); |
||||
|
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
final File cache404File = fileCache.get(testImage + "404"); |
||||
fileCache.downloadFile(testImage + "404", new FileCache.DownloadedCallback() { |
||||
@Override |
||||
public void onProgress(long downloaded, long total, boolean done) { |
||||
Logger.i(TAG, "404 progress " + downloaded + "/" + total + " " + done); |
||||
} |
||||
|
||||
@Override |
||||
public void onSuccess(File file) { |
||||
Logger.i(TAG, "404 onSuccess " + file.exists()); |
||||
} |
||||
|
||||
@Override |
||||
public void onFail(boolean notFound) { |
||||
Logger.i(TAG, "404 onFail " + cache404File.exists()); |
||||
} |
||||
}); |
||||
} |
||||
}, 1000); |
||||
} |
||||
|
||||
private void testCache() { |
||||
Loadable loadable = new Loadable("g"); |
||||
loadable.mode = Loadable.Mode.CATALOG; |
||||
ChanLoader loader = new ChanLoader(loadable); |
||||
loader.addListener(new ChanLoader.ChanLoaderCallback() { |
||||
@Override |
||||
public void onChanLoaderData(ChanThread result) { |
||||
for (Post post : result.posts) { |
||||
if (post.hasImage) { |
||||
final String imageUrl = post.imageUrl; |
||||
fileCache.downloadFile(imageUrl, new FileCache.DownloadedCallback() { |
||||
@Override |
||||
public void onProgress(long downloaded, long total, boolean done) { |
||||
Logger.i(TAG, "Progress for " + imageUrl + " " + downloaded + "/" + total + " " + done); |
||||
} |
||||
|
||||
@Override |
||||
public void onSuccess(File file) { |
||||
Logger.i(TAG, "onSuccess for " + imageUrl + " exists() = " + file.exists()); |
||||
} |
||||
|
||||
@Override |
||||
public void onFail(boolean notFound) { |
||||
Logger.i(TAG, "onFail for " + imageUrl); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void onChanLoaderError(VolleyError error) { |
||||
|
||||
} |
||||
}); |
||||
loader.requestData(); |
||||
} |
||||
|
||||
private void testTimeout() { |
||||
testTimeoutInner("https://i.4cdn.org/hr/1429923649068.jpg", fileCache, 0); |
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
testTimeoutInner("https://i.4cdn.org/hr/1430058524427.jpg", fileCache, 0); |
||||
} |
||||
}, 200); |
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
testTimeoutInner("https://i.4cdn.org/hr/1430058627352.jpg", fileCache, 0); |
||||
} |
||||
}, 400); |
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
testTimeoutInner("https://i.4cdn.org/hr/1430058580015.jpg", fileCache, 0); |
||||
} |
||||
}, 600); |
||||
} |
||||
|
||||
private void testTimeoutInner(final String url, final FileCache fileCache, final int tries) { |
||||
final File cacheFile = fileCache.get(url); |
||||
Logger.i(TAG, "Downloading " + url + " try " + tries); |
||||
final FileCache.FileCacheDownloader downloader = fileCache.downloadFile(url, new FileCache.DownloadedCallback() { |
||||
@Override |
||||
public void onProgress(long downloaded, long total, boolean done) { |
||||
Logger.i(TAG, "onProgress " + url + " " + downloaded + "/" + total); |
||||
} |
||||
|
||||
@Override |
||||
public void onSuccess(File file) { |
||||
Logger.i(TAG, "onSuccess " + file.exists()); |
||||
} |
||||
|
||||
@Override |
||||
public void onFail(boolean notFound) { |
||||
Logger.i(TAG, "onFail Cachefile exists() = " + cacheFile.exists()); |
||||
} |
||||
}); |
||||
|
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
if (downloader == null) { |
||||
Logger.i(TAG, "Downloader null, cannot cancel"); |
||||
} else { |
||||
downloader.cancel(); |
||||
handler.postDelayed(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
if (tries < 10) { |
||||
testTimeoutInner(url, fileCache, tries + 1); |
||||
} else { |
||||
fileCache.logStats(); |
||||
} |
||||
} |
||||
}, 500); |
||||
} |
||||
} |
||||
}, 1000); |
||||
} |
||||
} |
Loading…
Reference in new issue