File: processor_test.py

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (124 lines) | stat: -rwxr-xr-x 3,825 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Test resources processing, i.e. <if> and <include> tag handling."""

import unittest
from processor import FileCache, Processor, LineNumber


class ProcessorTest(unittest.TestCase):
  """Test <include> tag processing logic."""

  def __init__(self, *args, **kwargs):
    unittest.TestCase.__init__(self, *args, **kwargs)
    self.maxDiff = None

  def setUp(self):
    FileCache._cache["/debug.js"] = """
// Copyright 2002 Older Chromium Author dudes.
function debug(msg) { if (window.DEBUG) alert(msg); }
""".strip()

    FileCache._cache["/global.js"] = """
// Copyright 2014 Old Chromium Author dudes.
<include src="/debug.js">
var global = 'type checking!';
""".strip()

    FileCache._cache["/checked.js"] = """
// Copyright 2028 Future Chromium Author dudes.
/**
 * @fileoverview Coolest app ever.
 * @author Douglas Crockford (douglas@crockford.com)
 */
<include src="/global.js">
debug(global);
// Here continues checked.js, a swell file.
""".strip()

    FileCache._cache["/double-debug.js"] = """
<include src="/debug.js">
<include src="/debug.js">
""".strip()

    self._processor = Processor("/checked.js")

  def testInline(self):
    self.assertMultiLineEqual("""
// Copyright 2028 Future Chromium Author dudes.
/**
 * @fileoverview Coolest app ever.
 * @author Douglas Crockford (douglas@crockford.com)
 */
// Copyright 2014 Old Chromium Author dudes.
// Copyright 2002 Older Chromium Author dudes.
function debug(msg) { if (window.DEBUG) alert(msg); }
var global = 'type checking!';
debug(global);
// Here continues checked.js, a swell file.
""".strip(), self._processor.contents)

  def assertLineNumber(self, abs_line, expected_line):
    actual_line = self._processor.get_file_from_line(abs_line)
    self.assertEqual(expected_line.file, actual_line.file)
    self.assertEqual(expected_line.line_number, actual_line.line_number)

  def testGetFileFromLine(self):
    """Verify that inlined files retain their original line info."""
    self.assertLineNumber(1, LineNumber("/checked.js", 1))
    self.assertLineNumber(5, LineNumber("/checked.js", 5))
    self.assertLineNumber(6, LineNumber("/global.js", 1))
    self.assertLineNumber(7, LineNumber("/debug.js", 1))
    self.assertLineNumber(8, LineNumber("/debug.js", 2))
    self.assertLineNumber(9, LineNumber("/global.js", 3))
    self.assertLineNumber(10, LineNumber("/checked.js", 7))
    self.assertLineNumber(11, LineNumber("/checked.js", 8))

  def testIncludedFiles(self):
    """Verify that files are tracked correctly as they're inlined."""
    self.assertEquals(set(["/global.js", "/debug.js"]),
                      self._processor.included_files)

  def testDoubleIncludedSkipped(self):
    """Verify that doubly included files are skipped."""
    processor = Processor("/double-debug.js")
    self.assertEquals(set(["/debug.js"]), processor.included_files)
    self.assertEquals(FileCache.read("/debug.js") + "\n", processor.contents)

class IfStrippingTest(unittest.TestCase):
  """Test that the contents of XML <if> blocks are stripped."""

  def __init__(self, *args, **kwargs):
    unittest.TestCase.__init__(self, *args, **kwargs)
    self.maxDiff = None

  def setUp(self):
    FileCache._cache["/century.js"] = """
  function getCurrentCentury() {
<if expr="netscape_os">
    alert("Oh wow!");
    return "XX";
</if>
    return "XXI";
  }
""".strip()

    self.processor_ = Processor("/century.js")

  def testIfStripping(self):
    self.assertMultiLineEqual("""
  function getCurrentCentury() {

    alert("Oh wow!");
    return "XX";

    return "XXI";
  }
""".strip(), self.processor_.contents)


if __name__ == '__main__':
  unittest.main()