Mercurial > piecrust2
comparison tests/mockutil.py @ 11:617191dec18e
Fixes for Windows, make `findPagePath` return a ref path.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 18 Aug 2014 16:47:44 -0700 |
parents | f5ca5c5bed85 |
children | 644869022b6e |
comparison
equal
deleted
inserted
replaced
10:cd35d356ccce | 11:617191dec18e |
---|---|
38 self.withDir('counter') | 38 self.withDir('counter') |
39 self.withFile('kitchen/_content/config.yml', | 39 self.withFile('kitchen/_content/config.yml', |
40 "site:\n title: Mock Website\n") | 40 "site:\n title: Mock Website\n") |
41 | 41 |
42 def path(self, p): | 42 def path(self, p): |
43 p = p.replace('\\', '/') | |
43 if p in ['/', '', None]: | 44 if p in ['/', '', None]: |
44 return '/%s' % self._root | 45 return '/%s' % self._root |
45 return '/%s/%s' % (self._root, p.lstrip('/')) | 46 return '/%s/%s' % (self._root, p.lstrip('/')) |
46 | 47 |
47 def getApp(self): | 48 def getApp(self): |
48 root_dir = self.path('/kitchen') | 49 root_dir = self.path('/kitchen') |
49 return PieCrust(root_dir, cache=False) | 50 return PieCrust(root_dir, cache=False) |
50 | 51 |
51 def withDir(self, path): | 52 def withDir(self, path): |
53 path = path.replace('\\', '/') | |
52 cur = self._fs[self._root] | 54 cur = self._fs[self._root] |
53 for b in path.split('/'): | 55 for b in path.split('/'): |
54 if b not in cur: | 56 if b not in cur: |
55 cur[b] = {} | 57 cur[b] = {} |
56 cur = cur[b] | 58 cur = cur[b] |
57 return self | 59 return self |
58 | 60 |
59 def withFile(self, path, contents): | 61 def withFile(self, path, contents): |
62 path = path.replace('\\', '/') | |
60 cur = self._fs[self._root] | 63 cur = self._fs[self._root] |
61 bits = path.split('/') | 64 bits = path.split('/') |
62 for b in bits[:-1]: | 65 for b in bits[:-1]: |
63 if b not in cur: | 66 if b not in cur: |
64 cur[b] = {} | 67 cur[b] = {} |
71 | 74 |
72 def withAssetDir(self, path): | 75 def withAssetDir(self, path): |
73 return self.withDir('kitchen/' + path) | 76 return self.withDir('kitchen/' + path) |
74 | 77 |
75 def withConfig(self, config): | 78 def withConfig(self, config): |
76 return self.withFile('kitchen/_content/config.yml', | 79 return self.withFile( |
80 'kitchen/_content/config.yml', | |
77 yaml.dump(config)) | 81 yaml.dump(config)) |
78 | 82 |
79 def withThemeConfig(self, config): | 83 def withThemeConfig(self, config): |
80 return self.withFile('kitchen/_content/theme/_content/theme_config.yml', | 84 return self.withFile( |
85 'kitchen/_content/theme/_content/theme_config.yml', | |
81 yaml.dump(config)) | 86 yaml.dump(config)) |
82 | 87 |
83 def withPage(self, url, config=None, contents=None): | 88 def withPage(self, url, config=None, contents=None): |
84 config = config or {} | 89 config = config or {} |
85 contents = contents or "A test page." | 90 contents = contents or "A test page." |
90 | 95 |
91 name, ext = os.path.splitext(url) | 96 name, ext = os.path.splitext(url) |
92 if not ext: | 97 if not ext: |
93 url += '.md' | 98 url += '.md' |
94 url = url.lstrip('/') | 99 url = url.lstrip('/') |
95 return self.withAsset('_content/pages/' + url, text) | 100 return self.withAsset('_content/' + url, text) |
96 | 101 |
97 def withPageAsset(self, page_url, name, contents=None): | 102 def withPageAsset(self, page_url, name, contents=None): |
98 contents = contents or "A test asset." | 103 contents = contents or "A test asset." |
99 url_base, ext = os.path.splitext(page_url) | 104 url_base, ext = os.path.splitext(page_url) |
100 dirname = url_base + '-assets' | 105 dirname = url_base + '-assets' |
136 def _createMock(self, name, orig, func, **kwargs): | 141 def _createMock(self, name, orig, func, **kwargs): |
137 self._originals[name] = orig | 142 self._originals[name] = orig |
138 self._patchers.append(mock.patch(name, func, **kwargs)) | 143 self._patchers.append(mock.patch(name, func, **kwargs)) |
139 | 144 |
140 def _open(self, path, *args, **kwargs): | 145 def _open(self, path, *args, **kwargs): |
141 path = os.path.abspath(path) | 146 path = os.path.normpath(path) |
142 if path.startswith(resources_path): | 147 if path.startswith(resources_path): |
143 return self._originals['__main__.open'](path, **kwargs) | 148 return self._originals['__main__.open'](path, **kwargs) |
144 e = self._getFsEntry(path) | 149 e = self._getFsEntry(path) |
150 if e is None: | |
151 raise OSError("No such file: %s" % path) | |
145 return io.StringIO(e[0]) | 152 return io.StringIO(e[0]) |
146 | 153 |
147 def _codecsOpen(self, path, *args, **kwargs): | 154 def _codecsOpen(self, path, *args, **kwargs): |
148 path = os.path.abspath(path) | 155 path = os.path.normpath(path) |
149 if path.startswith(resources_path): | 156 if path.startswith(resources_path): |
150 return self._originals['codecs.open'](path, *args, **kwargs) | 157 return self._originals['codecs.open'](path, *args, **kwargs) |
151 e = self._getFsEntry(path) | 158 e = self._getFsEntry(path) |
159 if e is None: | |
160 raise OSError("No such file: %s" % path) | |
152 return io.StringIO(e[0]) | 161 return io.StringIO(e[0]) |
153 | 162 |
154 def _listdir(self, path): | 163 def _listdir(self, path): |
155 if not path.startswith('/' + self._root): | 164 if not path.startswith('/' + self._root): |
156 return self._originals['os.listdir'](path) | 165 return self._originals['os.listdir'](path) |
157 e = self._getFsEntry(path) | 166 e = self._getFsEntry(path) |
167 if e is None: | |
168 raise OSError("No such directory: %s" % path) | |
158 if not isinstance(e, dict): | 169 if not isinstance(e, dict): |
159 raise Exception("'%s' is not a directory." % path) | 170 raise OSError("'%s' is not a directory." % path) |
160 return list(e.keys()) | 171 return list(e.keys()) |
161 | 172 |
162 def _isdir(self, path): | 173 def _isdir(self, path): |
163 if not path.startswith('/' + self._root): | 174 if not path.startswith('/' + self._root): |
164 return self._originals['os.path.isdir'](path) | 175 return self._originals['os.path.isdir'](path) |
173 def _getmtime(self, path): | 184 def _getmtime(self, path): |
174 if not path.startswith('/' + self._root): | 185 if not path.startswith('/' + self._root): |
175 return self._originals['os.path.getmtime'](path) | 186 return self._originals['os.path.getmtime'](path) |
176 e = self._getFsEntry(path) | 187 e = self._getFsEntry(path) |
177 if e is None: | 188 if e is None: |
178 raise OSError() | 189 raise OSError("No such file: %s" % path) |
179 return e[1]['mtime'] | 190 return e[1]['mtime'] |
180 | 191 |
181 def _getFsEntry(self, path): | 192 def _getFsEntry(self, path): |
182 cur = self._fs | 193 cur = self._fs |
183 bits = path.lstrip('/').split('/') | 194 path = path.replace('\\', '/').lstrip('/') |
195 bits = path.split('/') | |
184 for p in bits: | 196 for p in bits: |
185 try: | 197 try: |
186 cur = cur[p] | 198 cur = cur[p] |
187 except KeyError: | 199 except KeyError: |
188 return None | 200 return None |