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