]> git.saurik.com Git - android/aapt.git/blob - tests/MockDirectoryWalker.h
resolved conflicts for merge of bc2fb7b9 to jb-dev-plus-aosp
[android/aapt.git] / tests / MockDirectoryWalker.h
1 //
2 // Copyright 2011 The Android Open Source Project
3 //
4 #ifndef MOCKDIRECTORYWALKER_H
5 #define MOCKDIRECTORYWALKER_H
6
7 #include <utils/Vector.h>
8 #include <utils/String8.h>
9 #include <utility>
10 #include "DirectoryWalker.h"
11
12 using namespace android;
13 using std::pair;
14
15 // String8 Directory Walker
16 // This is an implementation of the Directory Walker abstraction that is built
17 // for testing.
18 // Instead of system calls it queries a private data structure for the directory
19 // entries. It takes a path and a map of filenames and their modification times.
20 // functions are inlined since they are short and simple
21
22 class StringDirectoryWalker : public DirectoryWalker {
23 public:
24 StringDirectoryWalker(String8& path, Vector< pair<String8,time_t> >& data)
25 : mPos(0), mBasePath(path), mData(data) {
26 //fprintf(stdout,"StringDW built to mimic %s with %d files\n",
27 // mBasePath.string());
28 };
29 // Default copy constructor, and destructor are fine
30
31 virtual bool openDir(String8 path) {
32 // If the user is trying to query the "directory" that this
33 // walker was initialized with, then return success. Else fail.
34 return path == mBasePath;
35 };
36 virtual bool openDir(const char* path) {
37 String8 p(path);
38 openDir(p);
39 return true;
40 };
41 // Advance to next entry in the Vector
42 virtual struct dirent* nextEntry() {
43 // Advance position and check to see if we're done
44 if (mPos >= mData.size())
45 return NULL;
46
47 // Place data in the entry descriptor. This class only returns files.
48 mEntry.d_type = DT_REG;
49 mEntry.d_ino = mPos;
50 // Copy chars from the string name to the entry name
51 size_t i = 0;
52 for (i; i < mData[mPos].first.size(); ++i)
53 mEntry.d_name[i] = mData[mPos].first[i];
54 mEntry.d_name[i] = '\0';
55
56 // Place data in stats
57 mStats.st_ino = mPos;
58 mStats.st_mtime = mData[mPos].second;
59
60 // Get ready to move to the next entry
61 mPos++;
62
63 return &mEntry;
64 };
65 // Get the stats for the current entry
66 virtual struct stat* entryStats() {
67 return &mStats;
68 };
69 // Nothing to do in clean up
70 virtual void closeDir() {
71 // Nothing to do
72 };
73 virtual DirectoryWalker* clone() {
74 return new StringDirectoryWalker(*this);
75 };
76 private:
77 // Current position in the Vector
78 size_t mPos;
79 // Base path
80 String8 mBasePath;
81 // Data to simulate a directory full of files.
82 Vector< pair<String8,time_t> > mData;
83 };
84
85 #endif // MOCKDIRECTORYWALKER_H