2015-01-07 21:40:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								package   helpers 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import   ( 
  
						 
					
						
							
								
									
										
										
										
											2015-01-27 10:15:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									 "html/template" 
  
						 
					
						
							
								
									
										
										
										
											2015-02-05 21:44:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									 "strings" 
  
						 
					
						
							
								
									
										
										
										
											2015-01-07 21:40:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									 "testing" 
  
						 
					
						
							
								
									
										
										
										
											2015-09-03 18:22:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 "github.com/stretchr/testify/assert" 
  
						 
					
						
							
								
									
										
										
										
											2015-01-07 21:40:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-11 11:34:57 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const   tstHTMLContent   =   "<!DOCTYPE html><html><head><script src=\"http://two/foobar.js\"></script></head><body><nav><ul><li hugo-nav=\"section_0\"></li><li hugo-nav=\"section_1\"></li></ul></nav><article>content <a href=\"http://two/foobar\">foobar</a>. Follow up</article><p>This is some text.<br>And some more.</p></body></html>" 
  
						 
					
						
							
								
									
										
										
										
											2015-02-06 10:00:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 21:40:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								func   TestStripHTML ( t   * testing . T )   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 type   test   struct   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 input ,   expected   string 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 data   :=   [ ] test { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "<h1>strip h1 tag <h1>" ,   "strip h1 tag " } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "<p> strip p tag </p>" ,   " strip p tag \n" } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "</br> strip br<br>" ,   " strip br\n" } , 
  
						 
					
						
							
								
									
										
										
										
											2015-02-05 18:31:11 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										 { "</br> strip br2<br />" ,   " strip br2\n" } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "This <strong>is</strong> a\nnewline" ,   "This is a newline" } , 
  
						 
					
						
							
								
									
										
										
										
											2015-01-07 21:40:35 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 for   i ,   d   :=   range   data   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 output   :=   StripHTML ( d . input ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 if   d . expected   !=   output   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											 t . Errorf ( "Test %d failed. Expected %q got %q" ,   i ,   d . expected ,   output ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
  
						 
					
						
							
								
									
										
										
										
											2015-01-27 10:15:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-06 10:00:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func   BenchmarkStripHTML ( b   * testing . B )   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 b . ResetTimer ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 for   i   :=   0 ;   i   <   b . N ;   i ++   { 
  
						 
					
						
							
								
									
										
										
										
											2015-03-11 11:34:57 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										 StripHTML ( tstHTMLContent ) 
  
						 
					
						
							
								
									
										
										
										
											2015-02-06 10:00:42 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-01-27 10:15:57 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func   TestStripEmptyNav ( t   * testing . T )   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 cleaned   :=   StripEmptyNav ( [ ] byte ( "do<nav>\n</nav>\n\nbedobedo" ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 assert . Equal ( t ,   [ ] byte ( "dobedobedo" ) ,   cleaned ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func   TestBytesToHTML ( t   * testing . T )   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 assert . Equal ( t ,   template . HTML ( "dobedobedo" ) ,   BytesToHTML ( [ ] byte ( "dobedobedo" ) ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
  
						 
					
						
							
								
									
										
										
										
											2015-02-05 21:44:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func   TestTruncateWordsToWholeSentence ( t   * testing . T )   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 type   test   struct   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 input ,   expected   string 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 max               int 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 truncated         bool 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 data   :=   [ ] test { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "a b c" ,   "a b c" ,   12 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "a b c" ,   "a b c" ,   3 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "a" ,   "a" ,   1 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "This is a sentence." ,   "This is a sentence." ,   5 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "This is also a sentence!" ,   "This is also a sentence!" ,   1 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "To be. Or not to be. That's the question." ,   "To be." ,   1 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { " \nThis is not a sentence\n " ,   "This is not a" ,   4 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 for   i ,   d   :=   range   data   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 output ,   truncated   :=   TruncateWordsToWholeSentence ( strings . Fields ( d . input ) ,   d . max ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 if   d . expected   !=   output   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											 t . Errorf ( "Test %d failed. Expected %q got %q" ,   i ,   d . expected ,   output ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 if   d . truncated   !=   truncated   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											 t . Errorf ( "Test %d failed. Expected truncated=%t got %t" ,   i ,   d . truncated ,   truncated ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
  
						 
					
						
							
								
									
										
										
										
											2015-09-03 18:22:20 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func   TestTruncateWordsByRune ( t   * testing . T )   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 type   test   struct   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 input ,   expected   string 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 max               int 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 truncated         bool 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 data   :=   [ ] test { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "" ,   "" ,   1 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "a b c" ,   "a b c" ,   12 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "a b c" ,   "a b c" ,   3 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "a" ,   "a" ,   1 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "Hello 中国" ,   "" ,   0 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "这是中文,全中文。" ,   "这是中文," ,   5 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "Hello 中国" ,   "Hello 中" ,   2 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "Hello 中国" ,   "Hello 中国" ,   3 ,   false } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "Hello中国 Good 好的" ,   "Hello中国 Good 好" ,   9 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "This is a sentence." ,   "This is" ,   2 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "This is also a sentence!" ,   "This" ,   1 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { "To be. Or not to be. That's the question." ,   "To be. Or not" ,   4 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 { " \nThis is    not a sentence\n " ,   "This is not" ,   3 ,   true } , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 for   i ,   d   :=   range   data   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 output ,   truncated   :=   TruncateWordsByRune ( strings . Fields ( d . input ) ,   d . max ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 if   d . expected   !=   output   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											 t . Errorf ( "Test %d failed. Expected %q got %q" ,   i ,   d . expected ,   output ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 if   d . truncated   !=   truncated   { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											 t . Errorf ( "Test %d failed. Expected truncated=%t got %t" ,   i ,   d . truncated ,   truncated ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									 } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}