1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import re
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import StringIO
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import util
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)from telemetry.unittest import tab_test_case
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabConsoleTest(tab_test_case.TabTestCase):
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConsoleOutputStream(self):
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    stream = StringIO.StringIO()
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    self._tab.message_output_stream = stream
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    self.Navigate('page_that_logs_to_console.html')
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    initial = self._tab.EvaluateJavaScript('window.__logCount')
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    def GotLog():
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      current = self._tab.EvaluateJavaScript('window.__logCount')
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return current > initial
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    util.WaitFor(GotLog, 5)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    lines = [l for l in stream.getvalue().split('\n') if len(l)]
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertTrue(len(lines) >= 1)
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    for line in lines:
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefix = 'http://(.+)/page_that_logs_to_console.html:9'
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      expected_line = 'At %s: Hello, world' % prefix
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      self.assertTrue(re.match(expected_line, line))
32