1 //
2 // Copyright 2011 The Android Open Source Project
3 //
4 #include <utils/String8.h>
5 #include <iostream>
6 #include <errno.h>
7 
8 #include "CrunchCache.h"
9 #include "FileFinder.h"
10 #include "MockFileFinder.h"
11 #include "CacheUpdater.h"
12 #include "MockCacheUpdater.h"
13 
14 using namespace android;
15 using std::cout;
16 using std::endl;
17 
expectEqual(int got,int expected,const char * desc)18 void expectEqual(int got, int expected, const char* desc) {
19     cout << "Checking " << desc << ": ";
20     cout << "Got " << got << ", expected " << expected << "...";
21     cout << ( (got == expected) ? "PASSED" : "FAILED") << endl;
22     errno += ((got == expected) ? 0 : 1);
23 }
24 
main()25 int main() {
26 
27     errno = 0;
28 
29     String8 source("res");
30     String8 dest("res2");
31 
32     // Create data for MockFileFinder to feed to the cache
33     KeyedVector<String8, time_t> sourceData;
34     // This shouldn't be updated
35     sourceData.add(String8("res/drawable/hello.png"),3);
36     // This should be updated
37     sourceData.add(String8("res/drawable/world.png"),5);
38     // This should cause make directory to be called
39     sourceData.add(String8("res/drawable-cool/hello.png"),3);
40 
41     KeyedVector<String8, time_t> destData;
42     destData.add(String8("res2/drawable/hello.png"),3);
43     destData.add(String8("res2/drawable/world.png"),3);
44     // this should call delete
45     destData.add(String8("res2/drawable/dead.png"),3);
46 
47     // Package up data and create mock file finder
48     KeyedVector<String8, KeyedVector<String8,time_t> > data;
49     data.add(source,sourceData);
50     data.add(dest,destData);
51     FileFinder* ff = new MockFileFinder(data);
52     CrunchCache cc(source,dest,ff);
53 
54     MockCacheUpdater* mcu = new MockCacheUpdater();
55     CacheUpdater* cu(mcu);
56 
57     cout << "Running Crunch...";
58     int result = cc.crunch(cu);
59     cout << ((result > 0) ? "PASSED" : "FAILED") << endl;
60     errno += ((result > 0) ? 0 : 1);
61 
62     const int EXPECTED_RESULT = 2;
63     expectEqual(result, EXPECTED_RESULT, "number of files touched");
64 
65     cout << "Checking calls to deleteFile and processImage:" << endl;
66     const int EXPECTED_DELETES = 1;
67     const int EXPECTED_PROCESSED = 2;
68     // Deletes
69     expectEqual(mcu->deleteCount, EXPECTED_DELETES, "deleteFile");
70     // processImage
71     expectEqual(mcu->processCount, EXPECTED_PROCESSED, "processImage");
72 
73     const int EXPECTED_OVERWRITES = 3;
74     result = cc.crunch(cu, true);
75     expectEqual(result, EXPECTED_OVERWRITES, "number of files touched with overwrite");
76     \
77 
78     if (errno == 0)
79         cout << "ALL TESTS PASSED!" << endl;
80     else
81         cout << errno << " TESTS FAILED" << endl;
82 
83     delete ff;
84     delete cu;
85 
86     // TESTS BELOW WILL GO AWAY SOON
87 
88     String8 source2("ApiDemos/res");
89     String8 dest2("ApiDemos/res2");
90 
91     FileFinder* sff = new SystemFileFinder();
92     CacheUpdater* scu = new SystemCacheUpdater();
93 
94     CrunchCache scc(source2,dest2,sff);
95 
96     scc.crunch(scu);
97 }