1 //
2 // Copyright 2011 The Android Open Source Project
3 //
4 
5 #ifndef MOCKFILEFINDER_H
6 #define MOCKFILEFINDER_H
7 
8 #include <utils/Vector.h>
9 #include <utils/KeyedVector.h>
10 #include <utils/String8.h>
11 
12 #include "DirectoryWalker.h"
13 
14 using namespace android;
15 
16 class MockFileFinder : public FileFinder {
17 public:
MockFileFinder(KeyedVector<String8,KeyedVector<String8,time_t>> & files)18     MockFileFinder (KeyedVector<String8, KeyedVector<String8,time_t> >& files)
19         : mFiles(files)
20     {
21         // Nothing left to do
22     };
23 
24     /**
25      * findFiles implementation for the abstraction.
26      * PRECONDITIONS:
27      *  No checking is done, so there MUST be an entry in mFiles with
28      *  path matching basePath.
29      *
30      * POSTCONDITIONS:
31      *  fileStore is filled with a copy of the data in mFiles corresponding
32      *  to the basePath.
33      */
34 
findFiles(String8 basePath,Vector<String8> & extensions,KeyedVector<String8,time_t> & fileStore,DirectoryWalker * dw)35     virtual bool findFiles(String8 basePath, Vector<String8>& extensions,
36                            KeyedVector<String8,time_t>& fileStore,
37                            DirectoryWalker* dw)
38     {
39         const KeyedVector<String8,time_t>* payload(&mFiles.valueFor(basePath));
40         // Since KeyedVector doesn't implement swap
41         // (who doesn't use swap??) we loop and add one at a time.
42         for (size_t i = 0; i < payload->size(); ++i) {
43             fileStore.add(payload->keyAt(i),payload->valueAt(i));
44         }
45         return true;
46     }
47 
48 private:
49     // Virtual mapping between "directories" and the "files" contained
50     // in them
51     KeyedVector<String8, KeyedVector<String8,time_t> > mFiles;
52 };
53 
54 
55 #endif // MOCKFILEFINDER_H