processor_test.py revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Test resources processing, i.e. <if> and <include> tag handling.""" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from processor import FileCache, Processor, LineNumber 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProcessorTest(unittest.TestCase): 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test <include> tag processing logic.""" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, *args, **kwargs): 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unittest.TestCase.__init__(self, *args, **kwargs) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.maxDiff = None 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def setUp(self): 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileCache._cache["/debug.js"] = """ 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2002 Older Chromium Author dudes. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function debug(msg) { if (window.DEBUG) alert(msg); } 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""".strip() 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileCache._cache["/global.js"] = """ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 Old Chromium Author dudes. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<include src="/debug.js"> 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var global = 'type checking!'; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""".strip() 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileCache._cache["/checked.js"] = """ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2028 Future Chromium Author dudes. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @fileoverview Coolest app ever. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @author Douglas Crockford (douglas@crockford.com) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)<include src="/global.js"> 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)debug(global); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Here continues checked.js, a swell file. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""".strip() 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42 self._processor = Processor("/checked.js") 43 44 def testInline(self): 45 self.assertMultiLineEqual(""" 46// Copyright 2028 Future Chromium Author dudes. 47/** 48 * @fileoverview Coolest app ever. 49 * @author Douglas Crockford (douglas@crockford.com) 50 */ 51// Copyright 2014 Old Chromium Author dudes. 52// Copyright 2002 Older Chromium Author dudes. 53function debug(msg) { if (window.DEBUG) alert(msg); } 54var global = 'type checking!'; 55debug(global); 56// Here continues checked.js, a swell file. 57""".strip(), self._processor.contents) 58 59 def assertLineNumber(self, abs_line, expected_line): 60 actual_line = self._processor.get_file_from_line(abs_line) 61 self.assertEqual(expected_line.file, actual_line.file) 62 self.assertEqual(expected_line.line_number, actual_line.line_number) 63 64 def testGetFileFromLine(self): 65 """Verify that inlined files retain their original line info.""" 66 self.assertLineNumber(1, LineNumber("/checked.js", 1)) 67 self.assertLineNumber(5, LineNumber("/checked.js", 5)) 68 self.assertLineNumber(6, LineNumber("/global.js", 1)) 69 self.assertLineNumber(7, LineNumber("/debug.js", 1)) 70 self.assertLineNumber(8, LineNumber("/debug.js", 2)) 71 self.assertLineNumber(9, LineNumber("/global.js", 3)) 72 self.assertLineNumber(10, LineNumber("/checked.js", 7)) 73 self.assertLineNumber(11, LineNumber("/checked.js", 8)) 74 75 def testIncludedFiles(self): 76 """Verify that files are tracked correctly as they're inlined.""" 77 self.assertEquals(set(["/global.js", "/debug.js"]), 78 self._processor.included_files) 79 80 81class IfStrippingTest(unittest.TestCase): 82 """Test that the contents of XML <if> blocks are stripped.""" 83 84 def __init__(self, *args, **kwargs): 85 unittest.TestCase.__init__(self, *args, **kwargs) 86 self.maxDiff = None 87 88 def setUp(self): 89 FileCache._cache["/century.js"] = """ 90 function getCurrentCentury() { 91<if expr="netscape_os"> 92 alert("Oh wow!"); 93 return "XX"; 94</if> 95 return "XXI"; 96 } 97""".strip() 98 99 self.processor_ = Processor("/century.js") 100 101 def testIfStripping(self): 102 self.assertMultiLineEqual(""" 103 function getCurrentCentury() { 104 105 alert("Oh wow!"); 106 return "XX"; 107 108 return "XXI"; 109 } 110""".strip(), self.processor_.contents) 111 112 113if __name__ == '__main__': 114 unittest.main() 115