text: <!DOCTYPE html>
  <html>
  <!--
  Copyright 2010 The Closure Library Authors. All Rights Reserved.
  
  Use of this source code is governed by the Apache License, Version 2.0.
  See the COPYING file for details.
  -->
  <!--
  -->
  <head>
  <title>Closure Unit Tests - goog.messaging.LoggerClient</title>
  <script src="../base.js"></script>
  <script>
  goog.require('goog.debug.Logger');
  goog.require('goog.debug.Logger.Level');
  goog.require('goog.messaging.LoggerClient');
  goog.require('goog.testing.MockControl');
  goog.require('goog.testing.jsunit');
  goog.require('goog.testing.messaging.MockMessageChannel');
  </script>
  </head>
  <body>
  <script>
  
  var mockControl;
  var channel;
  var client;
  var logger;
  
  function setUp() {
    mockControl = new goog.testing.MockControl();
    channel = new goog.testing.messaging.MockMessageChannel(mockControl);
    client = new goog.messaging.LoggerClient(channel, 'log');
    logger = goog.debug.Logger.getLogger('test.logging.Object');
  }
  
  function tearDown() {
    channel.dispose();
    client.dispose();
  }
  
  function testCommand() {
    channel.send('log', {
      name: 'test.logging.Object',
      level: goog.debug.Logger.Level.WARNING.value,
      message: 'foo bar',
      exception: undefined
    });
    mockControl.$replayAll();
    logger.warning('foo bar');
    mockControl.$verifyAll();
  }
  
  function testCommandWithException() {
    var ex = Error('oh no');
    ex.stack = ['one', 'two'];
    ex.message0 = 'message 0';
    ex.message1 = 'message 1';
    ex.ignoredProperty = 'ignored';
  
    channel.send('log', {
      name: 'test.logging.Object',
      level: goog.debug.Logger.Level.WARNING.value,
      message: 'foo bar',
      exception: {
        name: 'Error',
        message: ex.message,
        stack: ex.stack,
        lineNumber: ex.lineNumber || 'Not available',
        fileName: ex.fileName || window.location.href,
        message0: ex.message0,
        message1: ex.message1
      }
    });
    mockControl.$replayAll();
    logger.warning('foo bar', ex);
    mockControl.$verifyAll();
  }
  
  function testCommandWithStringException() {
    channel.send('log', {
      name: 'test.logging.Object',
      level: goog.debug.Logger.Level.WARNING.value,
      message: 'foo bar',
      exception: {
        name: 'Unknown error',
        message: 'oh no',
        stack: '[Anonymous](object, foo bar, oh no)\n' +
            '[Anonymous](foo bar, oh no)\n' + goog.debug.getStacktrace(),
        lineNumber: 'Not available',
        fileName: window.location.href
      }
    });
    mockControl.$replayAll();
    logger.warning('foo bar', 'oh no');
    mockControl.$verifyAll();
  }
  
  </script>
  </body>
  </html>
  