2020-02-04 03:04:07 +01:00
|
|
|
package jp.juggler.subwaytooter
|
|
|
|
|
2020-02-04 11:37:13 +01:00
|
|
|
import jp.juggler.subwaytooter.api.entity.TootAccount
|
2020-02-04 07:14:26 +01:00
|
|
|
import jp.juggler.util.asciiPatternString
|
2020-02-04 03:04:07 +01:00
|
|
|
import org.junit.Assert.assertEquals
|
|
|
|
import org.junit.Test
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
@Suppress("MemberNameEqualsClassName")
|
2020-02-04 03:04:07 +01:00
|
|
|
class TestMisskeyMention {
|
2021-06-20 15:12:25 +02:00
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testBracket() {
|
|
|
|
// [] 空の文字セットはパースエラーになる。
|
|
|
|
// val re1="""[]""".toRegex() // error 空の文字クラス
|
|
|
|
|
|
|
|
// [[] や [[]] はパースエラーになる。
|
|
|
|
// val re1="""[[]""".toRegex() // error 閉じ括弧が足りない
|
|
|
|
// val re1="""[[]]""".toRegex() // error 内側が空の文字クラス
|
|
|
|
|
|
|
|
// 最低でも1文字を含む。
|
|
|
|
assertEquals(true, """[]]""".toRegex().matches("]"))
|
|
|
|
|
|
|
|
// 1文字あけた次からは閉じ括弧として扱われる。
|
|
|
|
assertEquals(true, """[ ]]""".toRegex().matches(" ]"))
|
|
|
|
|
|
|
|
// 閉じ括弧が単体で出たら文字クラスにならない。
|
|
|
|
assertEquals(true, """]""".toRegex().matches("]"))
|
|
|
|
|
|
|
|
// 閉じ括弧が足りないのはエラーになる。
|
|
|
|
// val a="""[[ ]""".toRegex()
|
|
|
|
|
|
|
|
// IDEで警告が出るが、Androidは正規表現エンジンが異なるので仕方ない
|
|
|
|
@Suppress("RegExpRedundantNestedCharacterClass")
|
|
|
|
assertEquals(true, """[[ ]]][ ]""".toRegex().matches(" ] "))
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Throws(Exception::class)
|
|
|
|
fun testAsciiPattern() {
|
|
|
|
// \w \d \W \D 以外の文字は素通しする
|
|
|
|
assertEquals("""ab\c\\""", """ab\c\\""".asciiPatternString())
|
|
|
|
assertEquals("""[A-Za-z0-9_]""", """\w""".asciiPatternString())
|
|
|
|
assertEquals("""[A-Za-z0-9_-]""", """[\w-]""".asciiPatternString())
|
|
|
|
assertEquals("""[^A-Za-z0-9_]""", """\W""".asciiPatternString())
|
|
|
|
assertEquals("""[0-9]""", """\d""".asciiPatternString())
|
|
|
|
assertEquals("""[0-9:-]""", """[\d:-]""".asciiPatternString())
|
|
|
|
assertEquals("""[^0-9]""", """\D""".asciiPatternString())
|
|
|
|
|
|
|
|
// 文字セットの中の \W \D は変換できないので素通しする
|
|
|
|
assertEquals("""[\W]""", """[\W]""".asciiPatternString())
|
|
|
|
assertEquals("""[\D]""", """[\D]""".asciiPatternString())
|
|
|
|
|
|
|
|
// エスケープ文字の後に何もない場合も素通しする
|
|
|
|
assertEquals("""\""", """\""".asciiPatternString())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testMisskeyMention() {
|
|
|
|
fun findMention(str: String): String? {
|
|
|
|
val m = TootAccount.reMisskeyMentionMFM.matcher(str)
|
|
|
|
return if (m.find()) m.group(0) else null
|
|
|
|
}
|
|
|
|
assertEquals(null, findMention(""))
|
|
|
|
assertEquals(null, findMention("tateisu"))
|
|
|
|
assertEquals("@tateisu", findMention("@tateisu"))
|
|
|
|
assertEquals("@tateisu", findMention("@tateisuほげ"))
|
|
|
|
assertEquals("@tateisu@mastodon.juggler.jp", findMention("@tateisu@mastodon.juggler.jp"))
|
|
|
|
assertEquals("@tateisu@mastodon.juggler.jp", findMention("@tateisu@mastodon.juggler.jpほげ"))
|
|
|
|
assertEquals("@tateisu", findMention("@tateisu@マストドン3.juggler.jp"))
|
|
|
|
assertEquals(
|
|
|
|
"@tateisu@xn--3-pfuzbe6htf.juggler.jp",
|
|
|
|
findMention("@tateisu@xn--3-pfuzbe6htf.juggler.jp")
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testMastodonMention() {
|
|
|
|
fun findMention(str: String): String? {
|
|
|
|
val m = TootAccount.reCountMention.matcher(str)
|
|
|
|
return if (m.find()) m.group(0) else null
|
|
|
|
}
|
|
|
|
assertEquals(null, findMention(""))
|
|
|
|
assertEquals(null, findMention("tateisu"))
|
|
|
|
assertEquals("@tateisu", findMention("@tateisu"))
|
|
|
|
assertEquals("@tateisu", findMention("@tateisuほげ"))
|
|
|
|
assertEquals("@tateisu@mastodon.juggler.jp", findMention("@tateisu@mastodon.juggler.jp"))
|
|
|
|
assertEquals("@tateisu@mastodon.juggler.jp", findMention("@tateisu@mastodon.juggler.jpほげ"))
|
|
|
|
assertEquals("@tateisu@マストドン3.juggler.jp", findMention("@tateisu@マストドン3.juggler.jp"))
|
|
|
|
assertEquals(
|
|
|
|
"@tateisu@xn--3-pfuzbe6htf.juggler.jp",
|
|
|
|
findMention("@tateisu@xn--3-pfuzbe6htf.juggler.jp")
|
|
|
|
)
|
|
|
|
}
|
2021-06-20 05:02:30 +02:00
|
|
|
}
|