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