18a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin//
28a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin// Copyright 2011 The Android Open Source Project
38a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin//
48a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include <utils/String8.h>
58a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include <iostream>
68a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include <errno.h>
78a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
88a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "CrunchCache.h"
98a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "FileFinder.h"
108a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "MockFileFinder.h"
118a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "CacheUpdater.h"
128a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin#include "MockCacheUpdater.h"
138a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
148a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinusing namespace android;
158a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinusing std::cout;
168a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinusing std::endl;
178a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
188a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinvoid expectEqual(int got, int expected, const char* desc) {
198a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    cout << "Checking " << desc << ": ";
208a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    cout << "Got " << got << ", expected " << expected << "...";
218a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    cout << ( (got == expected) ? "PASSED" : "FAILED") << endl;
228a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    errno += ((got == expected) ? 0 : 1);
238a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin}
248a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
258a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskinint main() {
268a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
278a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    errno = 0;
288a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
298a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    String8 source("res");
308a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    String8 dest("res2");
318a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
328a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // Create data for MockFileFinder to feed to the cache
338a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    KeyedVector<String8, time_t> sourceData;
348a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // This shouldn't be updated
358a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    sourceData.add(String8("res/drawable/hello.png"),3);
368a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // This should be updated
378a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    sourceData.add(String8("res/drawable/world.png"),5);
388a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // This should cause make directory to be called
398a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    sourceData.add(String8("res/drawable-cool/hello.png"),3);
408a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
418a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    KeyedVector<String8, time_t> destData;
428a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    destData.add(String8("res2/drawable/hello.png"),3);
438a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    destData.add(String8("res2/drawable/world.png"),3);
448a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // this should call delete
458a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    destData.add(String8("res2/drawable/dead.png"),3);
468a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
478a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // Package up data and create mock file finder
488a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    KeyedVector<String8, KeyedVector<String8,time_t> > data;
498a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    data.add(source,sourceData);
508a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    data.add(dest,destData);
518a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    FileFinder* ff = new MockFileFinder(data);
528a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    CrunchCache cc(source,dest,ff);
538a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
548a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    MockCacheUpdater* mcu = new MockCacheUpdater();
558a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    CacheUpdater* cu(mcu);
568a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
578a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    cout << "Running Crunch...";
588a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    int result = cc.crunch(cu);
598a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    cout << ((result > 0) ? "PASSED" : "FAILED") << endl;
608a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    errno += ((result > 0) ? 0 : 1);
618a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
628a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const int EXPECTED_RESULT = 2;
638a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    expectEqual(result, EXPECTED_RESULT, "number of files touched");
648a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
658a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    cout << "Checking calls to deleteFile and processImage:" << endl;
668a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const int EXPECTED_DELETES = 1;
678a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const int EXPECTED_PROCESSED = 2;
688a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // Deletes
698a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    expectEqual(mcu->deleteCount, EXPECTED_DELETES, "deleteFile");
708a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // processImage
718a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    expectEqual(mcu->processCount, EXPECTED_PROCESSED, "processImage");
728a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
738a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    const int EXPECTED_OVERWRITES = 3;
748a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    result = cc.crunch(cu, true);
758a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    expectEqual(result, EXPECTED_OVERWRITES, "number of files touched with overwrite");
768a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    \
778a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
788a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    if (errno == 0)
798a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin        cout << "ALL TESTS PASSED!" << endl;
808a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    else
818a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin        cout << errno << " TESTS FAILED" << endl;
828a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
838a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    delete ff;
848a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    delete cu;
858a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
868a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    // TESTS BELOW WILL GO AWAY SOON
878a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
888a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    String8 source2("ApiDemos/res");
898a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    String8 dest2("ApiDemos/res2");
908a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
918a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    FileFinder* sff = new SystemFileFinder();
928a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    CacheUpdater* scu = new SystemCacheUpdater();
938a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
948a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    CrunchCache scc(source2,dest2,sff);
958a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin
968a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin    scc.crunch(scu);
978a39da80b33691b0c82458c3b7727e13ff71277eJosiah Gaskin}