15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#!/usr/bin/env python 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# found in the LICENSE file. 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)"""Test resources processing, i.e. <if> and <include> tag handling.""" 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import unittest 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from processor import FileCache, Processor, LineNumber 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ProcessorTest(unittest.TestCase): 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) """Test <include> tag processing logic.""" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def __init__(self, *args, **kwargs): 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) unittest.TestCase.__init__(self, *args, **kwargs) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.maxDiff = None 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def setUp(self): 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FileCache._cache["/debug.js"] = """ 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2002 Older Chromium Author dudes. 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)function debug(msg) { if (window.DEBUG) alert(msg); } 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)""".strip() 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FileCache._cache["/global.js"] = """ 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 Old Chromium Author dudes. 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="/debug.js"> 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)var global = 'type checking!'; 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)""".strip() 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FileCache._cache["/checked.js"] = """ 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2028 Future Chromium Author dudes. 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/** 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @fileoverview Coolest app ever. 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @author Douglas Crockford (douglas@crockford.com) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="/global.js"> 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)debug(global); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Here continues checked.js, a swell file. 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)""".strip() 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._processor = Processor("/checked.js") 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testInline(self): 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertMultiLineEqual(""" 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2028 Future Chromium Author dudes. 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/** 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @fileoverview Coolest app ever. 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @author Douglas Crockford (douglas@crockford.com) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 Old Chromium Author dudes. 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2002 Older Chromium Author dudes. 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)function debug(msg) { if (window.DEBUG) alert(msg); } 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)var global = 'type checking!'; 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)debug(global); 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Here continues checked.js, a swell file. 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)""".strip(), self._processor.contents) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def assertLineNumber(self, abs_line, expected_line): 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) actual_line = self._processor.get_file_from_line(abs_line) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEqual(expected_line.file, actual_line.file) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertEqual(expected_line.line_number, actual_line.line_number) 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testGetFileFromLine(self): 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) """Verify that inlined files retain their original line info.""" 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(1, LineNumber("/checked.js", 1)) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(5, LineNumber("/checked.js", 5)) 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(6, LineNumber("/global.js", 1)) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(7, LineNumber("/debug.js", 1)) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(8, LineNumber("/debug.js", 2)) 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(9, LineNumber("/global.js", 3)) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(10, LineNumber("/checked.js", 7)) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertLineNumber(11, LineNumber("/checked.js", 8)) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def testIncludedFiles(self): 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) """Verify that files are tracked correctly as they're inlined.""" 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.assertEquals(set(["/global.js", "/debug.js"]), 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._processor.included_files) 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class IfStrippingTest(unittest.TestCase): 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) """Test that the contents of XML <if> blocks are stripped.""" 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def __init__(self, *args, **kwargs): 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) unittest.TestCase.__init__(self, *args, **kwargs) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.maxDiff = None 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def setUp(self): 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FileCache._cache["/century.js"] = """ 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function getCurrentCentury() { 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<if expr="netscape_os"> 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) alert("Oh wow!"); 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "XX"; 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)</if> 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "XXI"; 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)""".strip() 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.processor_ = Processor("/century.js") 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testIfStripping(self): 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertMultiLineEqual(""" 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) function getCurrentCentury() { 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) alert("Oh wow!"); 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "XX"; 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return "XXI"; 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)""".strip(), self.processor_.contents) 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)if __name__ == '__main__': 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) unittest.main() 115