| 
									
										
										
										
											2023-12-27 11:23:52 +01:00
										 |  |  | // GoToSocial | 
					
						
							|  |  |  | // Copyright (C) GoToSocial Authors admin@gotosocial.org | 
					
						
							|  |  |  | // SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | // GNU Affero General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  | // along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package router | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"html/template" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 11:48:21 +00:00
										 |  |  | func TestOutdentPreformatted(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2023-12-27 11:23:52 +01:00
										 |  |  | 	const html = template.HTML(` | 
					
						
							|  |  |  |         <div class="text"> | 
					
						
							| 
									
										
										
										
											2025-05-07 11:48:21 +00:00
										 |  |  |             <div | 
					
						
							|  |  |  |                 class="content" | 
					
						
							|  |  |  |                 lang="en" | 
					
						
							|  |  |  |                 title="DW from Arthur is labeled "crawlers".  | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |             She's reading a sign on a door that says: "robots.txt: don't crawl this website, it's not for you, please, thanks." | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         With her hands on her hips looking annoyed she says "That sign won't stop me because I can't read!"" | 
					
						
							|  |  |  |                 alt="pee pee poo poo" | 
					
						
							|  |  |  |             > | 
					
						
							| 
									
										
										
										
											2023-12-27 11:23:52 +01:00
										 |  |  |                 <p>Here's a bunch of HTML, read it and weep, weep then!</p> | 
					
						
							|  |  |  |                 <pre><code class="language-html"><section class="about-user"> | 
					
						
							|  |  |  |                     <div class="col-header"> | 
					
						
							|  |  |  |                         <h2>About</h2> | 
					
						
							|  |  |  |                     </div>             | 
					
						
							|  |  |  |                     <div class="fields"> | 
					
						
							|  |  |  |                         <h3 class="sr-only">Fields</h3> | 
					
						
							|  |  |  |                         <dl> | 
					
						
							|  |  |  |                             <div class="field"> | 
					
						
							|  |  |  |                                 <dt>should you follow me?</dt> | 
					
						
							|  |  |  |                                 <dd>maybe!</dd> | 
					
						
							|  |  |  |                             </div> | 
					
						
							|  |  |  |                             <div class="field"> | 
					
						
							|  |  |  |                                 <dt>age</dt> | 
					
						
							|  |  |  |                                 <dd>120</dd> | 
					
						
							|  |  |  |                             </div> | 
					
						
							|  |  |  |                         </dl> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                     <div class="bio"> | 
					
						
							|  |  |  |                         <h3 class="sr-only">Bio</h3> | 
					
						
							|  |  |  |                         <p>i post about things that concern me</p> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                     <div class="sr-only" role="group"> | 
					
						
							|  |  |  |                         <h3 class="sr-only">Stats</h3> | 
					
						
							|  |  |  |                         <span>Joined in Jun, 2022.</span> | 
					
						
							|  |  |  |                         <span>8 posts.</span> | 
					
						
							|  |  |  |                         <span>Followed by 1.</span> | 
					
						
							|  |  |  |                         <span>Following 1.</span> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                     <div class="accountstats" aria-hidden="true"> | 
					
						
							|  |  |  |                         <b>Joined</b><time datetime="2022-06-04T13:12:00.000Z">Jun, 2022</time> | 
					
						
							|  |  |  |                         <b>Posts</b><span>8</span> | 
					
						
							|  |  |  |                         <b>Followed by</b><span>1</span> | 
					
						
							|  |  |  |                         <b>Following</b><span>1</span> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                 </section> | 
					
						
							|  |  |  |                 </code></pre> | 
					
						
							|  |  |  |                 <p>There, hope you liked that!</p> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |         <div class="text"> | 
					
						
							| 
									
										
										
										
											2025-05-07 11:48:21 +00:00
										 |  |  |             <div | 
					
						
							|  |  |  |                 class="content" | 
					
						
							|  |  |  |                 lang="en" | 
					
						
							|  |  |  |                 alt="DW from Arthur is labeled "crawlers".  | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         She's reading a sign on a door that says: "robots.txt: don't crawl this website, it's not for you, please, thanks." | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         With her hands on her hips looking annoyed she says "That sign won't stop me because I can't read!"" | 
					
						
							|  |  |  |             > | 
					
						
							| 
									
										
										
										
											2023-12-27 11:23:52 +01:00
										 |  |  |                 <p>Here's a bunch of HTML, read it and weep, weep then!</p> | 
					
						
							|  |  |  |                 <pre><code class="language-html"><section class="about-user"> | 
					
						
							|  |  |  |                     <div class="col-header"> | 
					
						
							|  |  |  |                         <h2>About</h2> | 
					
						
							|  |  |  |                     </div>             | 
					
						
							|  |  |  |                     <div class="fields"> | 
					
						
							|  |  |  |                         <h3 class="sr-only">Fields</h3> | 
					
						
							|  |  |  |                         <dl> | 
					
						
							|  |  |  |                             <div class="field"> | 
					
						
							|  |  |  |                                 <dt>should you follow me?</dt> | 
					
						
							|  |  |  |                                 <dd>maybe!</dd> | 
					
						
							|  |  |  |                             </div> | 
					
						
							|  |  |  |                             <div class="field"> | 
					
						
							|  |  |  |                                 <dt>age</dt> | 
					
						
							|  |  |  |                                 <dd>120</dd> | 
					
						
							|  |  |  |                             </div> | 
					
						
							|  |  |  |                         </dl> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                     <div class="bio"> | 
					
						
							|  |  |  |                         <h3 class="sr-only">Bio</h3> | 
					
						
							|  |  |  |                         <p>i post about things that concern me</p> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                     <div class="sr-only" role="group"> | 
					
						
							|  |  |  |                         <h3 class="sr-only">Stats</h3> | 
					
						
							|  |  |  |                         <span>Joined in Jun, 2022.</span> | 
					
						
							|  |  |  |                         <span>8 posts.</span> | 
					
						
							|  |  |  |                         <span>Followed by 1.</span> | 
					
						
							|  |  |  |                         <span>Following 1.</span> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                     <div class="accountstats" aria-hidden="true"> | 
					
						
							|  |  |  |                         <b>Joined</b><time datetime="2022-06-04T13:12:00.000Z">Jun, 2022</time> | 
					
						
							|  |  |  |                         <b>Posts</b><span>8</span> | 
					
						
							|  |  |  |                         <b>Followed by</b><span>1</span> | 
					
						
							|  |  |  |                         <b>Following</b><span>1</span> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                 </section> | 
					
						
							|  |  |  |                 </code></pre> | 
					
						
							|  |  |  |                 <p>There, hope you liked that!</p> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  | `) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const expected = template.HTML(` | 
					
						
							|  |  |  |         <div class="text"> | 
					
						
							| 
									
										
										
										
											2025-05-07 11:48:21 +00:00
										 |  |  |             <div | 
					
						
							|  |  |  |                 class="content" | 
					
						
							|  |  |  |                 lang="en" | 
					
						
							|  |  |  |                 title="DW from Arthur is labeled "crawlers".  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     She's reading a sign on a door that says: "robots.txt: don't crawl this website, it's not for you, please, thanks." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | With her hands on her hips looking annoyed she says "That sign won't stop me because I can't read!"" | 
					
						
							|  |  |  |                 alt="pee pee poo poo" | 
					
						
							|  |  |  |             > | 
					
						
							| 
									
										
										
										
											2023-12-27 11:23:52 +01:00
										 |  |  |                 <p>Here's a bunch of HTML, read it and weep, weep then!</p> | 
					
						
							|  |  |  | <pre><code class="language-html"><section class="about-user"> | 
					
						
							|  |  |  |     <div class="col-header"> | 
					
						
							|  |  |  |         <h2>About</h2> | 
					
						
							|  |  |  |     </div>             | 
					
						
							|  |  |  |     <div class="fields"> | 
					
						
							|  |  |  |         <h3 class="sr-only">Fields</h3> | 
					
						
							|  |  |  |         <dl> | 
					
						
							|  |  |  |             <div class="field"> | 
					
						
							|  |  |  | <dt>should you follow me?</dt> | 
					
						
							|  |  |  | <dd>maybe!</dd> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |             <div class="field"> | 
					
						
							|  |  |  | <dt>age</dt> | 
					
						
							|  |  |  | <dd>120</dd> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </dl> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="bio"> | 
					
						
							|  |  |  |         <h3 class="sr-only">Bio</h3> | 
					
						
							|  |  |  |         <p>i post about things that concern me</p> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="sr-only" role="group"> | 
					
						
							|  |  |  |         <h3 class="sr-only">Stats</h3> | 
					
						
							|  |  |  |         <span>Joined in Jun, 2022.</span> | 
					
						
							|  |  |  |         <span>8 posts.</span> | 
					
						
							|  |  |  |         <span>Followed by 1.</span> | 
					
						
							|  |  |  |         <span>Following 1.</span> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="accountstats" aria-hidden="true"> | 
					
						
							|  |  |  |         <b>Joined</b><time datetime="2022-06-04T13:12:00.000Z">Jun, 2022</time> | 
					
						
							|  |  |  |         <b>Posts</b><span>8</span> | 
					
						
							|  |  |  |         <b>Followed by</b><span>1</span> | 
					
						
							|  |  |  |         <b>Following</b><span>1</span> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | </section> | 
					
						
							|  |  |  | </code></pre> | 
					
						
							|  |  |  |                 <p>There, hope you liked that!</p> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |         <div class="text"> | 
					
						
							| 
									
										
										
										
											2025-05-07 11:48:21 +00:00
										 |  |  |             <div | 
					
						
							|  |  |  |                 class="content" | 
					
						
							|  |  |  |                 lang="en" | 
					
						
							|  |  |  |                 alt="DW from Arthur is labeled "crawlers".  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | She's reading a sign on a door that says: "robots.txt: don't crawl this website, it's not for you, please, thanks." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | With her hands on her hips looking annoyed she says "That sign won't stop me because I can't read!"" | 
					
						
							|  |  |  |             > | 
					
						
							| 
									
										
										
										
											2023-12-27 11:23:52 +01:00
										 |  |  |                 <p>Here's a bunch of HTML, read it and weep, weep then!</p> | 
					
						
							|  |  |  | <pre><code class="language-html"><section class="about-user"> | 
					
						
							|  |  |  |     <div class="col-header"> | 
					
						
							|  |  |  |         <h2>About</h2> | 
					
						
							|  |  |  |     </div>             | 
					
						
							|  |  |  |     <div class="fields"> | 
					
						
							|  |  |  |         <h3 class="sr-only">Fields</h3> | 
					
						
							|  |  |  |         <dl> | 
					
						
							|  |  |  |             <div class="field"> | 
					
						
							|  |  |  | <dt>should you follow me?</dt> | 
					
						
							|  |  |  | <dd>maybe!</dd> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |             <div class="field"> | 
					
						
							|  |  |  | <dt>age</dt> | 
					
						
							|  |  |  | <dd>120</dd> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </dl> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="bio"> | 
					
						
							|  |  |  |         <h3 class="sr-only">Bio</h3> | 
					
						
							|  |  |  |         <p>i post about things that concern me</p> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="sr-only" role="group"> | 
					
						
							|  |  |  |         <h3 class="sr-only">Stats</h3> | 
					
						
							|  |  |  |         <span>Joined in Jun, 2022.</span> | 
					
						
							|  |  |  |         <span>8 posts.</span> | 
					
						
							|  |  |  |         <span>Followed by 1.</span> | 
					
						
							|  |  |  |         <span>Following 1.</span> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <div class="accountstats" aria-hidden="true"> | 
					
						
							|  |  |  |         <b>Joined</b><time datetime="2022-06-04T13:12:00.000Z">Jun, 2022</time> | 
					
						
							|  |  |  |         <b>Posts</b><span>8</span> | 
					
						
							|  |  |  |         <b>Followed by</b><span>1</span> | 
					
						
							|  |  |  |         <b>Following</b><span>1</span> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | </section> | 
					
						
							|  |  |  | </code></pre> | 
					
						
							|  |  |  |                 <p>There, hope you liked that!</p> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  | `) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-07 11:48:21 +00:00
										 |  |  | 	out := outdentPreformatted(html) | 
					
						
							| 
									
										
										
										
											2023-12-27 11:23:52 +01:00
										 |  |  | 	if out != expected { | 
					
						
							|  |  |  | 		t.Fatalf("unexpected output:\n`%s`\n", out) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |