12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python
22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2012, Google Inc.
42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# All rights reserved.
52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Redistribution and use in source and binary forms, with or without
72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# modification, are permitted provided that the following conditions are
82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# met:
92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#     * Redistributions of source code must retain the above copyright
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# notice, this list of conditions and the following disclaimer.
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#     * Redistributions in binary form must reproduce the above
132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# copyright notice, this list of conditions and the following disclaimer
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# in the documentation and/or other materials provided with the
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# distribution.
162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#     * Neither the name of Google Inc. nor the names of its
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# contributors may be used to endorse or promote products derived from
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# this software without specific prior written permission.
192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""Tests for extensions module."""
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport set_sys_path  # Update sys.path to locate mod_pywebsocket module.
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom mod_pywebsocket import common
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom mod_pywebsocket import extensions
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass PerFrameCompressionExtensionTest(unittest.TestCase):
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    """A unittest for the perframe-compression extension."""
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_method_simple(self):
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method_list = extensions._parse_compression_method('foo')
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(1, len(method_list))
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method = method_list[0]
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('foo', method.name())
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(0, len(method.get_parameters()))
532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_method_with_parameter(self):
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method_list = extensions._parse_compression_method('foo; x; y=10')
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(1, len(method_list))
572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method = method_list[0]
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('foo', method.name())
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(2, len(method.get_parameters()))
602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertTrue(method.has_parameter('x'))
612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(None, method.get_parameter_value('x'))
622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertTrue(method.has_parameter('y'))
632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('10', method.get_parameter_value('y'))
642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_method_with_quoted_parameter(self):
662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method_list = extensions._parse_compression_method(
672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis            'foo; x="Hello World"; y=10')
682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(1, len(method_list))
692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method = method_list[0]
702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('foo', method.name())
712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(2, len(method.get_parameters()))
722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertTrue(method.has_parameter('x'))
732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('Hello World', method.get_parameter_value('x'))
742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertTrue(method.has_parameter('y'))
752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('10', method.get_parameter_value('y'))
762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_method_multiple(self):
782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method_list = extensions._parse_compression_method('foo, bar')
792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(2, len(method_list))
802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('foo', method_list[0].name())
812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(0, len(method_list[0].get_parameters()))
822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('bar', method_list[1].name())
832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(0, len(method_list[1].get_parameters()))
842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_method_multiple_methods_with_quoted_parameter(self):
862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        method_list = extensions._parse_compression_method(
872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis            'foo; x="Hello World", bar; y=10')
882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(2, len(method_list))
892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('foo', method_list[0].name())
902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(1, len(method_list[0].get_parameters()))
912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertTrue(method_list[0].has_parameter('x'))
922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('Hello World',
932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                         method_list[0].get_parameter_value('x'))
942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('bar', method_list[1].name())
952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(1, len(method_list[1].get_parameters()))
962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertTrue(method_list[1].has_parameter('y'))
972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('10', method_list[1].get_parameter_value('y'))
982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_create_method_desc_simple(self):
1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        params = common.ExtensionParameter('foo')
1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        desc = extensions._create_accepted_method_desc('foo',
1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                                                       params.get_parameters())
1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('foo', desc)
1042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_create_method_desc_with_parameters(self):
1062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        params = common.ExtensionParameter('foo')
1072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        params.add_parameter('x', 'Hello, World')
1082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        params.add_parameter('y', '10')
1092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        desc = extensions._create_accepted_method_desc('foo',
1102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                                                       params.get_parameters())
1112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('foo; x="Hello, World"; y=10', desc)
1122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1142da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == '__main__':
1152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    unittest.main()
1162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
1182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# vi:sts=4 sw=4 et
119