<s> import unittest <EOL> import os <EOL> import re <EOL> from iktomi . utils import html <EOL> from lxml . html import Element <EOL> class TestSanitizer ( unittest . TestCase ) : <EOL> '''<STR_LIT>''' <EOL> def setUp ( self ) : <EOL> self . attrs = { <EOL> '<STR_LIT>' : [ '<STR_LIT:a>' , '<STR_LIT:p>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT:u>' , '<STR_LIT:i>' , '<STR_LIT:b>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT:src>' , '<STR_LIT>' , '<STR_LIT:title>' , '<STR_LIT:class>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT:p>' , '<STR_LIT:a>' , '<STR_LIT:u>' , '<STR_LIT:i>' , '<STR_LIT:b>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : { } , <EOL> '<STR_LIT>' : [ ] , <EOL> } <EOL> def sanitize ( self , text ) : <EOL> return html . sanitize ( text , ** self . attrs ) <EOL> def assertSanitize ( self , text , right ) : <EOL> res = self . sanitize ( text ) <EOL> self . assertEqual ( res , right ) <EOL> def test_safe_attrs ( self ) : <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> def test_safe_tags ( self ) : <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> def test_empty_tags ( self ) : <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . attrs [ '<STR_LIT>' ] . append ( '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> @ unittest . skip ( '<STR_LIT>' ) <EOL> def test_safe_css ( self ) : <EOL> u'''<STR_LIT>''' <EOL> self . attrs [ '<STR_LIT>' ] . append ( '<STR_LIT>' ) <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> assert '<STR_LIT>' in res <EOL> def test_allowed_classes ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] [ '<STR_LIT:p>' ] = [ '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] [ '<STR_LIT:b>' ] = lambda x : '<STR_LIT:b>' in x <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> def test_tags_sticking ( self ) : <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> @ unittest . skip ( '<STR_LIT>' ) <EOL> def test_autoclosing_attrs_xhtml ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = '<STR_LIT>' <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> def test_autoclosing_attrs_html ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ ] <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> def test_remove_empty_a ( self ) : <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> @ unittest . skip ( '<STR_LIT>' ) <EOL> def test_unsafe_css ( self ) : <EOL> u'''<STR_LIT>''' <EOL> self . attrs [ '<STR_LIT>' ] . append ( '<STR_LIT>' ) <EOL> res = self . sanitize ( '<STR_LIT>' <EOL> '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> def test_plain_text ( self ) : <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> def test_empty_strings ( self ) : <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> def test_on_real_data ( self ) : <EOL> '''<STR_LIT>''' <EOL> return None <EOL> skips = <NUM_LIT:10> <EOL> if os . path . isdir ( '<STR_LIT>' ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ html . remove_TinyMCE_trash , <EOL> html . strip_empty_tags_nested , <EOL> spaceless ] <EOL> for dir , dirs , files in os . walk ( '<STR_LIT>' ) : <EOL> for file in filter ( lambda x : x . endswith ( '<STR_LIT>' ) , files ) : <EOL> path = os . path . join ( dir , file ) <EOL> in_ = open ( path , '<STR_LIT:r>' ) . read ( ) . decode ( '<STR_LIT:utf-8>' ) <EOL> out = open ( path [ : - <NUM_LIT:3> ] + '<STR_LIT>' , '<STR_LIT:r>' ) . read ( ) . decode ( '<STR_LIT:utf-8>' ) <EOL> out = html . remove_TinyMCE_trash ( out ) <EOL> res = self . sanitize ( in_ ) . strip ( ) <EOL> if res != out : <EOL> if skips < <NUM_LIT:10> : <EOL> print in_ , '<STR_LIT>' , res + '<STR_LIT>' + out + '<STR_LIT>' <EOL> skips -= <NUM_LIT:1> <EOL> if not skips : <EOL> return <EOL> def test_no_initial_data ( self ) : <EOL> self . attrs = { } <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> @ unittest . skip ( '<STR_LIT>' ) <EOL> def test_escaping ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = True <EOL> res = self . sanitize ( '<STR_LIT>' ) <EOL> self . assertEqual ( res , '<STR_LIT>' ) <EOL> def test_tags_to_wrap ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = True <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> def test_tags_to_wrap_trailing_br ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = True <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> def test_tags_to_wrap_double_br ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = True <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( "<STR_LIT>" , "<STR_LIT>" ) <EOL> def test_split_paragraphs_by_br ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = True <EOL> self . attrs [ '<STR_LIT>' ] = [ ] <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> def test_wrap_inline_tags ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = False <EOL> self . assertSanitize ( '<STR_LIT>' , <EOL> '<STR_LIT>' ) <EOL> def test_p_not_allowed ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = '<STR_LIT>' <EOL> self . attrs [ '<STR_LIT>' ] . remove ( '<STR_LIT:p>' ) <EOL> self . attrs [ '<STR_LIT>' ] . append ( '<STR_LIT>' ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> def test_lambda_wrap_tag ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = lambda : Element ( '<STR_LIT>' ) <EOL> self . assertSanitize ( "<STR_LIT>" , <EOL> "<STR_LIT>" ) <EOL> self . attrs [ '<STR_LIT>' ] . remove ( '<STR_LIT:p>' ) <EOL> def test_no_wrap_tags ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = [ '<STR_LIT:b>' , '<STR_LIT:i>' , '<STR_LIT>' ] <EOL> self . attrs [ '<STR_LIT>' ] = True <EOL> self . attrs [ '<STR_LIT>' ] . remove ( '<STR_LIT:p>' ) <EOL> self . assertRaises ( ValueError , self . sanitize , '<STR_LIT>' ) <EOL> def test_create_cleaner_with_wrong_parameters ( self ) : <EOL> self . attrs [ '<STR_LIT>' ] = True <EOL> self . attrs [ '<STR_LIT>' ] . remove ( '<STR_LIT:p>' ) <EOL> self . assertRaises ( ValueError , html . Cleaner , ** self . attrs ) <EOL> def spaceless ( clean , ** kwargs ) : <EOL> clean = re . compile ( '<STR_LIT>' ) . sub ( '<STR_LIT:U+0020>' , clean ) <EOL> return clean . strip ( ) </s>
