Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(566)

Side by Side Diff: third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_parser.py

Issue 2012963002: Add and clean up docstrings in webkitpy/w3c. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 2
3 # Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 3 # Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions 6 # modification, are permitted provided that the following conditions
7 # are met: 7 # are met:
8 # 8 #
9 # 1. Redistributions of source code must retain the above 9 # 1. Redistributions of source code must retain the above
10 # copyright notice, this list of conditions and the following 10 # copyright notice, this list of conditions and the following
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 # FIXME: Figure out what is triggering this and what to do about it. 62 # FIXME: Figure out what is triggering this and what to do about it.
63 _log.error("Trying to load %s, which is a directory", filename) 63 _log.error("Trying to load %s, which is a directory", filename)
64 doc = None 64 doc = None
65 65
66 if is_ref: 66 if is_ref:
67 self.ref_doc = doc 67 self.ref_doc = doc
68 else: 68 else:
69 self.test_doc = doc 69 self.test_doc = doc
70 70
71 def analyze_test(self, test_contents=None, ref_contents=None): 71 def analyze_test(self, test_contents=None, ref_contents=None):
72 """ Analyzes a file to determine if it's a test, what type of test, and what reference or support files it requires. Returns all of the test info """ 72 """Analyzes a file to determine if it's a test, what type of test, and w hat reference or support files it requires.
73 73
74 Returns: A dict which can have the properties:
75 "test": test file name.
76 "reference": related reference test file name if this is a reference test.
77 "reference_support_info": extra information about the related refere nce test and any support files.
78 "jstest": A boolean, whether this is a JS test.
79 If the given contents are empty, then None is returned.
80 """
74 test_info = None 81 test_info = None
75 82
76 if test_contents is None and self.test_doc is None: 83 if test_contents is None and self.test_doc is None:
77 return test_info 84 return test_info
78 85
79 if test_contents is not None: 86 if test_contents is not None:
80 self.test_doc = Parser(test_contents) 87 self.test_doc = Parser(test_contents)
81 88
82 if ref_contents is not None: 89 if ref_contents is not None:
83 self.ref_doc = Parser(ref_contents) 90 self.ref_doc = Parser(ref_contents)
(...skipping 11 matching lines...) Expand all
95 except KeyError as e: 102 except KeyError as e:
96 # FIXME: Figure out what to do w/ invalid test files. 103 # FIXME: Figure out what to do w/ invalid test files.
97 _log.error('%s has a reference link but is missing the "href"', self.filesystem) 104 _log.error('%s has a reference link but is missing the "href"', self.filesystem)
98 return None 105 return None
99 106
100 if self.ref_doc is None: 107 if self.ref_doc is None:
101 self.load_file(ref_file, True) 108 self.load_file(ref_file, True)
102 109
103 test_info = {'test': self.filename, 'reference': ref_file} 110 test_info = {'test': self.filename, 'reference': ref_file}
104 111
105 # If the ref file does not live in the same directory as the test fi le, check it for support files 112 # If the ref file does not live in the same directory as the test fi le, check it for support files.
106 test_info['reference_support_info'] = {} 113 test_info['reference_support_info'] = {}
107 if self.filesystem.dirname(ref_file) != self.filesystem.dirname(self .filename): 114 if self.filesystem.dirname(ref_file) != self.filesystem.dirname(self .filename):
108 reference_support_files = self.support_files(self.ref_doc) 115 reference_support_files = self.support_files(self.ref_doc)
109 if len(reference_support_files) > 0: 116 if len(reference_support_files) > 0:
110 reference_relpath = self.filesystem.relpath(self.filesystem. dirname( 117 reference_relpath = self.filesystem.relpath(self.filesystem. dirname(
111 self.filename), self.filesystem.dirname(ref_file)) + sel f.filesystem.sep 118 self.filename), self.filesystem.dirname(ref_file)) + sel f.filesystem.sep
112 test_info['reference_support_info'] = {'reference_relpath': reference_relpath, 'files': reference_support_files} 119 test_info['reference_support_info'] = {'reference_relpath': reference_relpath, 'files': reference_support_files}
113 120
114 elif self.is_jstest(): 121 elif self.is_jstest():
115 test_info = {'test': self.filename, 'jstest': True} 122 test_info = {'test': self.filename, 'jstest': True}
116 elif self.options['all'] is True and not('-ref' in self.filename) and no t('reference' in self.filename): 123 elif self.options['all'] is True and not('-ref' in self.filename) and no t('reference' in self.filename):
117 test_info = {'test': self.filename} 124 test_info = {'test': self.filename}
118 125
119 return test_info 126 return test_info
120 127
121 def reference_links_of_type(self, reftest_type): 128 def reference_links_of_type(self, reftest_type):
122 return self.test_doc.findAll(rel=reftest_type) 129 return self.test_doc.findAll(rel=reftest_type)
123 130
124 def is_jstest(self): 131 def is_jstest(self):
125 """Returns whether the file appears to be a jstest, by searching for usa ge of W3C-style testharness paths.""" 132 """Returns whether the file appears to be a jstest, by searching for usa ge of W3C-style testharness paths."""
126 return bool(self.test_doc.find(src=re.compile('[\'\"/]?/resources/testha rness'))) 133 return bool(self.test_doc.find(src=re.compile('[\'\"/]?/resources/testha rness')))
127 134
128 def support_files(self, doc): 135 def support_files(self, doc):
129 """ Searches the file for all paths specified in url()'s or src attribut es.""" 136 """Searches the file for all paths specified in url()s or src attributes ."""
130 support_files = [] 137 support_files = []
131 138
132 if doc is None: 139 if doc is None:
133 return support_files 140 return support_files
134 141
135 elements_with_src_attributes = doc.findAll(src=re.compile('.*')) 142 elements_with_src_attributes = doc.findAll(src=re.compile('.*'))
136 elements_with_href_attributes = doc.findAll(href=re.compile('.*')) 143 elements_with_href_attributes = doc.findAll(href=re.compile('.*'))
137 144
138 url_pattern = re.compile('url\(.*\)') 145 url_pattern = re.compile('url\(.*\)')
139 urls = [] 146 urls = []
140 for url in doc.findAll(text=url_pattern): 147 for url in doc.findAll(text=url_pattern):
141 url = re.search(url_pattern, url) 148 url = re.search(url_pattern, url)
142 url = re.sub('url\([\'\"]?', '', url.group(0)) 149 url = re.sub('url\([\'\"]?', '', url.group(0))
143 url = re.sub('[\'\"]?\)', '', url) 150 url = re.sub('[\'\"]?\)', '', url)
144 urls.append(url) 151 urls.append(url)
145 152
146 src_paths = [src_tag['src'] for src_tag in elements_with_src_attributes] 153 src_paths = [src_tag['src'] for src_tag in elements_with_src_attributes]
147 href_paths = [href_tag['href'] for href_tag in elements_with_href_attrib utes] 154 href_paths = [href_tag['href'] for href_tag in elements_with_href_attrib utes]
148 155
149 paths = src_paths + href_paths + urls 156 paths = src_paths + href_paths + urls
150 for path in paths: 157 for path in paths:
151 if not(path.startswith('http:')) and not(path.startswith('mailto:')) : 158 if not(path.startswith('http:')) and not(path.startswith('mailto:')) :
152 uri_scheme_pattern = re.compile(r"[A-Za-z][A-Za-z+.-]*:") 159 uri_scheme_pattern = re.compile(r"[A-Za-z][A-Za-z+.-]*:")
153 if not uri_scheme_pattern.match(path): 160 if not uri_scheme_pattern.match(path):
154 support_files.append(path) 161 support_files.append(path)
155 162
156 return support_files 163 return support_files
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698