| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | /* | 
					
						
							|  |  |  |    GoToSocial | 
					
						
							|  |  |  |    Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    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/>. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-08 14:25:55 +02:00
										 |  |  | package util_test | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/suite" | 
					
						
							| 
									
										
										
										
											2021-05-08 14:25:55 +02:00
										 |  |  | 	"github.com/superseriousbusiness/gotosocial/internal/util" | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type StatusTestSuite struct { | 
					
						
							|  |  |  | 	suite.Suite | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-30 18:11:57 +02:00
										 |  |  | func (suite *StatusTestSuite) TestLinkNoMention() { | 
					
						
							|  |  |  | 	statusText := `here's a link to a post by zork: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | https://localhost:8080/@the_mighty_zork/statuses/01FGVP55XMF2K6316MQRX6PFG1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | that link shouldn't come out formatted as a mention!` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	menchies := util.DeriveMentionsFromText(statusText) | 
					
						
							|  |  |  | 	suite.Empty(menchies) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | func (suite *StatusTestSuite) TestDeriveMentionsOK() { | 
					
						
							|  |  |  | 	statusText := `@dumpsterqueer@example.org testing testing | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	is this thing on? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@someone_else@testing.best-horse.com can you confirm? @hello@test.lgbt | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-29 13:18:22 +02:00
										 |  |  | 	@thisisalocaluser! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	here is a duplicate mention: @hello@test.lgbt @hello@test.lgbt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@account1@whatever.com @account2@whatever.com | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-11 13:19:06 +02:00
										 |  |  | 	menchies := util.DeriveMentionsFromText(statusText) | 
					
						
							| 
									
										
										
										
											2021-07-29 13:18:22 +02:00
										 |  |  | 	assert.Len(suite.T(), menchies, 6) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	assert.Equal(suite.T(), "@dumpsterqueer@example.org", menchies[0]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "@someone_else@testing.best-horse.com", menchies[1]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "@hello@test.lgbt", menchies[2]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "@thisisalocaluser", menchies[3]) | 
					
						
							| 
									
										
										
										
											2021-07-29 13:18:22 +02:00
										 |  |  | 	assert.Equal(suite.T(), "@account1@whatever.com", menchies[4]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "@account2@whatever.com", menchies[5]) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (suite *StatusTestSuite) TestDeriveMentionsEmpty() { | 
					
						
							|  |  |  | 	statusText := `` | 
					
						
							| 
									
										
										
										
											2021-09-11 13:19:06 +02:00
										 |  |  | 	menchies := util.DeriveMentionsFromText(statusText) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	assert.Len(suite.T(), menchies, 0) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (suite *StatusTestSuite) TestDeriveHashtagsOK() { | 
					
						
							| 
									
										
										
										
											2021-07-29 13:18:22 +02:00
										 |  |  | 	statusText := `weeeeeeee #testing123 #also testing | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | # testing this one shouldn't work | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			#thisshouldwork | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-29 13:18:22 +02:00
										 |  |  | 	here's a link with a fragment: https://example.org/whatever#ahhh | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | #ThisShouldAlsoWork #not_this_though | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #111111 thisalsoshouldn'twork#### ##` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-11 13:19:06 +02:00
										 |  |  | 	tags := util.DeriveHashtagsFromText(statusText) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	assert.Len(suite.T(), tags, 5) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "testing123", tags[0]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "also", tags[1]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "thisshouldwork", tags[2]) | 
					
						
							| 
									
										
										
										
											2021-08-11 16:54:54 +02:00
										 |  |  | 	assert.Equal(suite.T(), "ThisShouldAlsoWork", tags[3]) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	assert.Equal(suite.T(), "111111", tags[4]) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (suite *StatusTestSuite) TestDeriveEmojiOK() { | 
					
						
							|  |  |  | 	statusText := `:test: :another: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here's some normal text with an :emoji: at the end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :spaces shouldnt work: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :emoji1::emoji2: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :anotheremoji:emoji2: | 
					
						
							|  |  |  | :anotheremoji::anotheremoji::anotheremoji::anotheremoji: | 
					
						
							|  |  |  | :underscores_ok_too: | 
					
						
							|  |  |  | ` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-11 13:19:06 +02:00
										 |  |  | 	tags := util.DeriveEmojisFromText(statusText) | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | 	assert.Len(suite.T(), tags, 7) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "test", tags[0]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "another", tags[1]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "emoji", tags[2]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "emoji1", tags[3]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "emoji2", tags[4]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "anotheremoji", tags[5]) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "underscores_ok_too", tags[6]) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-11 16:54:54 +02:00
										 |  |  | func (suite *StatusTestSuite) TestDeriveMultiple() { | 
					
						
							|  |  |  | 	statusText := `Another test @foss_satan@fossbros-anonymous.io | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	#Hashtag | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Text` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-11 13:19:06 +02:00
										 |  |  | 	ms := util.DeriveMentionsFromText(statusText) | 
					
						
							|  |  |  | 	hs := util.DeriveHashtagsFromText(statusText) | 
					
						
							|  |  |  | 	es := util.DeriveEmojisFromText(statusText) | 
					
						
							| 
									
										
										
										
											2021-08-11 16:54:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	assert.Len(suite.T(), ms, 1) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "@foss_satan@fossbros-anonymous.io", ms[0]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	assert.Len(suite.T(), hs, 1) | 
					
						
							|  |  |  | 	assert.Equal(suite.T(), "Hashtag", hs[0]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	assert.Len(suite.T(), es, 0) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-19 19:42:19 +02:00
										 |  |  | func TestStatusTestSuite(t *testing.T) { | 
					
						
							|  |  |  | 	suite.Run(t, new(StatusTestSuite)) | 
					
						
							|  |  |  | } |