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

Side by Side Diff: third_party/closure_compiler/compiler_test.py

Issue 1128843007: Add tests for third_party/closure_compiler/compile.py (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge tests into compiler_test.py Created 5 years, 7 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 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import os 6 import os
7 import unittest 7 import unittest
8 8
9 from compile import Checker 9 from compile import Checker
10 from processor import FileCache, Processor 10 from processor import FileCache, Processor
11 11
12 12
13 _SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 13 _SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
14 _SRC_DIR = os.path.join(_SCRIPT_DIR, os.pardir, os.pardir) 14 _SRC_DIR = os.path.join(_SCRIPT_DIR, os.pardir, os.pardir)
15 _RESOURCES_DIR = os.path.join(_SRC_DIR, "ui", "webui", "resources", "js") 15 _RESOURCES_DIR = os.path.join(_SRC_DIR, "ui", "webui", "resources", "js")
16 _ASSERT_JS = os.path.join(_RESOURCES_DIR, "assert.js") 16 _ASSERT_JS = os.path.join(_RESOURCES_DIR, "assert.js")
17 _CR_JS = os.path.join(_RESOURCES_DIR, "cr.js") 17 _CR_JS = os.path.join(_RESOURCES_DIR, "cr.js")
18 _CR_UI_JS = os.path.join(_RESOURCES_DIR, "cr", "ui.js") 18 _CR_UI_JS = os.path.join(_RESOURCES_DIR, "cr", "ui.js")
19 _POLYMER_EXTERNS = os.path.join(_SRC_DIR, "third_party", "polymer", "v0_8", 19 _POLYMER_EXTERNS = os.path.join(_SRC_DIR, "third_party", "polymer", "v0_8",
20 "components-chromium", "polymer-externs", 20 "components-chromium", "polymer-externs",
21 "polymer.externs.js") 21 "polymer.externs.js")
22 22
23 23
24 class CompilerCustomizationTest(unittest.TestCase): 24 class CompilerTest(unittest.TestCase):
25 _ASSERT_DEFINITION = Processor(_ASSERT_JS).contents 25 _ASSERT_DEFINITION = Processor(_ASSERT_JS).contents
26 _CR_DEFINE_DEFINITION = Processor(_CR_JS).contents 26 _CR_DEFINE_DEFINITION = Processor(_CR_JS).contents
27 _CR_UI_DECORATE_DEFINITION = Processor(_CR_UI_JS).contents 27 _CR_UI_DECORATE_DEFINITION = Processor(_CR_UI_JS).contents
28 28
29 def setUp(self): 29 def setUp(self):
30 self._checker = Checker() 30 self._checker = Checker()
31 31
Dan Beam 2015/05/19 18:23:33 def tearDown(self): # remove all files regardles
Theresa 2015/05/19 19:21:02 Done.
32 def _runChecker(self, source_code): 32 def _runChecker(self, source_code, output_wrapper=None):
33 file_path = "/script.js" 33 file_path = "/script.js"
34 FileCache._cache[file_path] = source_code 34 FileCache._cache[file_path] = source_code
35 return self._checker.check(file_path, externs=[_POLYMER_EXTERNS]) 35 out_file, out_map = self._createOutFiles()
36
37 found_errors, stderr = self._checker.check(file_path,
38 externs=[_POLYMER_EXTERNS],
39 out_file=out_file,
40 output_wrapper=output_wrapper)
41 return found_errors, stderr, out_file, out_map
36 42
37 def _runCheckerTestExpectError(self, source_code, expected_error): 43 def _runCheckerTestExpectError(self, source_code, expected_error):
38 _, stderr = self._runChecker(source_code) 44 _, stderr, out_file, out_map = self._runChecker(source_code)
39 45
40 self.assertTrue(expected_error in stderr, 46 self.assertTrue(expected_error in stderr,
41 msg="Expected chunk: \n%s\n\nOutput:\n%s\n" % ( 47 msg="Expected chunk: \n%s\n\nOutput:\n%s\n" % (
42 expected_error, stderr)) 48 expected_error, stderr))
49 self.assertFalse(os.path.exists(out_file))
50 self.assertFalse(os.path.exists(out_map))
43 51
44 def _runCheckerTestExpectSuccess(self, source_code): 52 def _runCheckerTestExpectSuccess(self, source_code, expected_output=None,
45 found_errors, stderr = self._runChecker(source_code) 53 output_wrapper=None):
54 found_errors, stderr, out_file, out_map = self._runChecker(source_code,
55 output_wrapper)
46 56
47 self.assertFalse(found_errors, 57 self.assertFalse(found_errors,
48 msg="Expected success, but got failure\n\nOutput:\n%s\n" % stderr) 58 msg="Expected success, but got failure\n\nOutput:\n%s\n" % stderr)
49 59
60 self.assertTrue(os.path.exists(out_map))
61 self.assertTrue(os.path.exists(out_file))
62 if expected_output:
63 with open(out_file, 'r') as file:
Dan Beam 2015/05/19 18:23:33 ' -> " everywhere feasible
Theresa 2015/05/19 19:21:02 Done.
64 self.assertEquals(file.read(), expected_output)
65
66 self._removeFiles([out_file, out_map])
67
68 def _createOutFiles(self):
Dan Beam 2015/05/19 18:23:32 why do we need this? shouldn't they be created by
Theresa 2015/05/19 18:29:23 The directory is created in main if it doesn't alr
Theresa 2015/05/19 19:21:02 Done.
Dan Beam 2015/05/20 02:01:00 why not move this to check() instead of main()? ht
Dan Beam 2015/05/20 02:05:33 sorry, make a _ensure_out_file_exists() (or someth
Theresa 2015/05/20 02:07:37 I moved it to _run_js_check() since it's not actua
69 out_file = "/tmp/gen/script.js"
70 out_map = "/tmp/gen/script.js.map"
71
72 out_dir = os.path.dirname(out_file)
73 if not os.path.exists(out_dir):
74 os.makedirs(out_dir)
75
76 return out_file, out_map
77
78 def _removeFiles(self, files):
79 for file in files:
80 if(os.path.exists(file)):
Dan Beam 2015/05/19 18:23:33 the python gods do not approve of your c-like synt
Theresa 2015/05/19 19:21:02 Done.
81 os.remove(file)
82
50 def testGetInstance(self): 83 def testGetInstance(self):
51 self._runCheckerTestExpectError(""" 84 self._runCheckerTestExpectError("""
52 var cr = { 85 var cr = {
53 /** @param {!Function} ctor */ 86 /** @param {!Function} ctor */
54 addSingletonGetter: function(ctor) { 87 addSingletonGetter: function(ctor) {
55 ctor.getInstance = function() { 88 ctor.getInstance = function() {
56 return ctor.instance_ || (ctor.instance_ = new ctor()); 89 return ctor.instance_ || (ctor.instance_ = new ctor());
57 }; 90 };
58 } 91 }
59 }; 92 };
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 function Class() {} 261 function Class() {}
229 262
230 /** @return {Class} */ 263 /** @return {Class} */
231 function f() { 264 function f() {
232 var a = document.createElement('div'); 265 var a = document.createElement('div');
233 cr.ui.decorate(a, Class); 266 cr.ui.decorate(a, Class);
234 return a; 267 return a;
235 } 268 }
236 """) 269 """)
237 270
271 def testValidScriptCompilation(self):
272 self._runCheckerTestExpectSuccess("""
273 var testScript = function() { console.log("hello world") };""",
Dan Beam 2015/05/19 18:23:33 can you put some \n in here so the difference is l
Theresa 2015/05/19 19:21:02 Done.
274 """'use strict';var testScript=function(){console.log("hello world")};\n""")
Dan Beam 2015/05/19 18:23:33 hmmm, why is 'use strict'; prepended?
Theresa 2015/05/19 18:29:23 Because the closure compiler always prepends it? I
Theresa 2015/05/19 19:21:01 I'm going to guess it's from the _COMMON_CLOSURE_A
275
276 def testOutputWrapper(self):
277 self._runCheckerTestExpectSuccess("""
Dan Beam 2015/05/19 18:23:33 indent off
Theresa 2015/05/19 19:21:01 Done.
278 var testScript = function() { console.log("hello world") };
279 """, """(function(){'use strict';var testScript=function()"""
280 + """{console.log("hello world")};})();\n""",
281 output_wrapper="(function(){%output%})();")
Dan Beam 2015/05/19 18:23:33 make this prettier
Theresa 2015/05/19 19:21:01 Done.
282
283 def testCheckMultiple(self):
284 source_file = "/tmp/script.js"
Dan Beam 2015/05/19 18:23:32 this should use tempfile instead https://docs.pyth
Theresa 2015/05/19 19:21:01 Done.
285 with open(source_file, 'w') as f:
286 f.write("""
Dan Beam 2015/05/19 18:23:33 why are we actually writing these files rather tha
Theresa 2015/05/19 18:29:22 I tried using FileCache._chache and the jar failed
Theresa 2015/05/19 19:21:01 Tried again and it still failed. I think the diffe
287 goog.require('testScript');
288
289 testScript();
290 """)
291
292 source_file2 = "/tmp/script2.js"
293 with open(source_file2, 'w') as f:
294 f.write("""
295 goog.provide('testScript');
296
297 var testScript = function(){};
298 """)
Dan Beam 2015/05/19 18:23:33 can you reverse the order of source_file/source_fi
Theresa 2015/05/19 19:21:01 Done.
299
300 out_file, out_map = self._createOutFiles()
301 sources = [source_file, source_file2]
302 externs = [_POLYMER_EXTERNS]
303 found_errors, stderr = self._checker.check_multiple(sources,
304 externs=externs,
305 out_file=out_file)
306 self.assertFalse(found_errors,
307 msg="Expected success, but got failure\n\nOutput:\n%s\n" % stderr)
308
309 expected_output = "'use strict';var testScript=function(){};testScript();\n"
310 self.assertTrue(os.path.exists(out_map))
311 self.assertTrue(os.path.exists(out_file))
312 with open(out_file, 'r') as file:
313 self.assertEquals(file.read(), expected_output)
314
315 self._removeFiles([source_file, source_file2, out_file, out_map])
316
238 317
239 if __name__ == "__main__": 318 if __name__ == "__main__":
240 unittest.main() 319 unittest.main()
OLDNEW
« no previous file with comments | « third_party/closure_compiler/compiler_customization_test.py ('k') | third_party/closure_compiler/run_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698