OLD | NEW |
| (Empty) |
1 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 # Use of this source code is governed by a BSD-style license that can be | |
3 # found in the LICENSE file. | |
4 | |
5 """DownloadInfo: python representation for downloads visible to Chrome. | |
6 | |
7 Obtain one of these from PyUITestSuite::GetDownloadsInfo() call. | |
8 | |
9 class MyDownloadsTest(pyauto.PyUITest): | |
10 def testDownload(self): | |
11 self.DownloadAndWaitForStart('http://my.url/package.zip') | |
12 self.WaitForAllDownloadsToComplete() | |
13 info = self.GetDownloadsInfo() | |
14 print info.Downloads() | |
15 self.assertEqual(info.Downloads()[0]['file_name'], 'packge.zip') | |
16 | |
17 See more tests in chrome/test/functional/downloads.py. | |
18 """ | |
19 | |
20 import os | |
21 import simplejson as json | |
22 import sys | |
23 | |
24 from pyauto_errors import JSONInterfaceError | |
25 | |
26 | |
27 class DownloadInfo(object): | |
28 """Represent info about Downloads. | |
29 | |
30 The info is represented as a list of DownloadItems. Each DownloadItem is a | |
31 dictionary with various attributes about a download, like id, file_name, | |
32 path, state, and so on. | |
33 """ | |
34 def __init__(self, downloads_dict): | |
35 """Initialize a DownloadInfo from a string of json. | |
36 | |
37 Args: | |
38 downloads_dict: a dict returned by the IPC command 'GetDownloadsInfo'. | |
39 A typical dict representing one download looks like: | |
40 {'downloads': [{'url': 'http://blah/a_file.zip', | |
41 'file_name': 'a_file.zip', | |
42 'state': 'COMPLETED', | |
43 ..., | |
44 ..., } ] } | |
45 | |
46 Raises: | |
47 pyauto_errors.JSONInterfaceError if the automation call returns an error. | |
48 """ | |
49 # JSON string prepared in GetDownloadsInfo() in automation_provider.cc | |
50 self.downloadsdict = downloads_dict | |
51 if self.downloadsdict.has_key('error'): | |
52 raise JSONInterfaceError(self.downloadsdict['error']) | |
53 | |
54 def Downloads(self): | |
55 """Info about all downloads. | |
56 | |
57 This includes downloads in all states (COMPLETE, IN_PROGRESS, ...). | |
58 | |
59 Returns: | |
60 [downloaditem1, downloaditem2, ...] | |
61 """ | |
62 return self.downloadsdict.get('downloads', []) | |
63 | |
64 def DownloadsInProgress(self): | |
65 """Info about all downloads in progress. | |
66 | |
67 Returns: | |
68 [downloaditem1, downloaditem2, ...] | |
69 """ | |
70 return [x for x in self.Downloads() if x['state'] == 'IN_PROGRESS'] | |
71 | |
72 def DownloadsComplete(self): | |
73 """Info about all downloads that have completed. | |
74 | |
75 Returns: | |
76 [downloaditem1, downloaditem2, ...] | |
77 """ | |
78 return [x for x in self.Downloads() if x['state'] == 'COMPLETE'] | |
OLD | NEW |