mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 06:32:24 -06:00 
			
		
		
		
	
		
			
	
	
		
			205 lines
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			205 lines
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// 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"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestOutdentPre(t *testing.T) {
							 | 
						||
| 
								 | 
							
									const html = template.HTML(`
							 | 
						||
| 
								 | 
							
								        <div class="text">
							 | 
						||
| 
								 | 
							
								            <div class="content" lang="en">                
							 | 
						||
| 
								 | 
							
								                <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">
							 | 
						||
| 
								 | 
							
								            <div class="content" lang="en">                
							 | 
						||
| 
								 | 
							
								                <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">
							 | 
						||
| 
								 | 
							
								            <div class="content" lang="en">                
							 | 
						||
| 
								 | 
							
								                <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">
							 | 
						||
| 
								 | 
							
								            <div class="content" lang="en">                
							 | 
						||
| 
								 | 
							
								                <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>
							 | 
						||
| 
								 | 
							
								`)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									out := outdentPre(html)
							 | 
						||
| 
								 | 
							
									if out != expected {
							 | 
						||
| 
								 | 
							
										t.Fatalf("unexpected output:\n`%s`\n", out)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |