• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2016 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import unittest
6
7from telemetry.util import js_template
8
9
10class JavaScriptTemplateTest(unittest.TestCase):
11  def testRenderSimple(self):
12    self.assertEquals(
13        js_template.Render(
14            'foo({{ a }}, {{ b }}, {{ c }})',
15            a=42, b='hello', c=['x', 'y']),
16        'foo(42, "hello", ["x", "y"])')
17
18  def testRenderWithSpecialCharts(self):
19    self.assertEquals(
20        js_template.Render(
21            'function(elem) { return elem.find({{ selector }}); }',
22            selector='.r > a[href*="wikipedia"]'),
23        r'function(elem) { return elem.find(".r > a[href*=\"wikipedia\"]"); }')
24
25  def testRenderWithLiteralValues(self):
26    self.assertEquals(
27        js_template.Render(
28            'var {{ @var_name }} = {{ x }} + {{ y }};',
29            var_name='foo', x='bar', y=None),
30        'var foo = "bar" + null;')
31
32  def testRenderWithArgumentExpansion(self):
33    self.assertEquals(
34        js_template.Render(
35            '{{ @f }}({{ *args }})', f='foo', args=(1, 'hi!', None)),
36        'foo(1, "hi!", null)')
37
38  def testRenderRaisesWithUnknownIdentifier(self):
39    with self.assertRaises(KeyError):
40      js_template.Render('foo({{ some_name }})', another_name='bar')
41
42  def testRenderRaisesWithBadIdentifier(self):
43    with self.assertRaises(KeyError):
44      js_template.Render('foo({{ bad identifier name }})', name='bar')
45
46  def testRenderRaisesWithBadLiteralValue(self):
47    with self.assertRaises(ValueError):
48      js_template.Render('function() { {{ @code }} }', code=['foo', 'bar'])
49
50  def testRenderRaisesWithUnusedKeywordArgs(self):
51    with self.assertRaises(TypeError):
52      js_template.Render('foo = {{ x }};', x=4, y=5, timemout=6)
53