    def test_lower(self):

        encoder = Encoder()

        self.assertEqual(
            '&amp;&lt;&gt;&quot;&apos;',
            encoder.encode( '&<>"\'' ),
            'default chars encoded when chars is nil'
        )

        self.assertEqual(
            '&amp;&lt;&gt;&quot;&apos;',
            encoder.encode( '&<>"\'', '' ),
            'encodes when chars is empty'
        )

        self.assertEqual(
            'h&#101;llo',
            encoder.encode( 'hello', 'e' ),
            'requested chars encoded correctly'
        )

        self.assertEqual(
            'hell&#48;',
            encoder.encode( 'hell0', 0 ),
            'zero encodes correctly'
        )

        self.assertEqual(
            '&amp;b&#97;r',
            encoder.encode( '&bar', 'a&' ),
            'ampersand is not double encoded'
        )

        self.assertEqual(
            'hello',
            encoder.encode( 'hello' ),
            'no encodes when default chars is nil'
        )

        self.assertEqual(
            'hello',
            encoder.encode( 'hello', '' ),
            'no encodes when default chars is empty'
        )

        deadbeef = chr(222) + chr(173) + chr(190) + chr(239)

        self.assertEqual(
            '&THORN;&shy;&frac34;&iuml;',
            encoder.encode( deadbeef, deadbeef ),
            'hex codes encoded correctly'
        )

        self.assertEqual(
            '&THORN;&shy;&frac34;&iuml;',
            encoder.encode( deadbeef ),
            'hex codes encoded correctly when chars is nil'
        )

        self.assertEqual(
            '&THORN;&shy;&frac34;&iuml;',
            encoder.encode( deadbeef, '' ),
            'hex codes encoded correctly when chars is empty'
        )