mirror of
git://jb55.com/damus
synced 2024-09-19 11:43:44 +00:00
0ad17c05fe
Signed-off-by: William Casarin <jb55@jb55.com>
315 lines
9.4 KiB
Swift
315 lines
9.4 KiB
Swift
//
|
|
// damusTests.swift
|
|
// damusTests
|
|
//
|
|
// Created by William Casarin on 2022-04-01.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import damus
|
|
|
|
class damusTests: XCTestCase {
|
|
|
|
override func setUpWithError() throws {
|
|
// Put setup code here. This method is called before the invocation of each test method in the class.
|
|
}
|
|
|
|
override func tearDownWithError() throws {
|
|
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
|
}
|
|
|
|
func testExample() throws {
|
|
// This is an example of a functional test case.
|
|
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
|
// Any test you write for XCTest can be annotated as throws and async.
|
|
// Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
|
|
// Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
|
|
}
|
|
|
|
func testPerformanceExample() throws {
|
|
// This is an example of a performance test case.
|
|
self.measure {
|
|
// Put the code you want to measure the time of here.
|
|
}
|
|
}
|
|
|
|
func testParseMention() throws {
|
|
let parsed = parse_mentions(content: "this is #[0] a mention", tags: [["e", "event_id"]])
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 3)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
XCTAssertTrue(parsed[1].is_mention)
|
|
XCTAssertTrue(parsed[2].is_text)
|
|
}
|
|
|
|
func testEmptyPostReference() throws {
|
|
let parsed = parse_post_blocks(content: "")
|
|
XCTAssertEqual(parsed.count, 0)
|
|
}
|
|
|
|
func testInvalidPostReference() throws {
|
|
let pk = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e24"
|
|
let content = "this is a @\(pk) mention"
|
|
let parsed = parse_post_blocks(content: content)
|
|
XCTAssertEqual(parsed.count, 1)
|
|
guard case .text(let txt) = parsed[0] else {
|
|
XCTAssert(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(txt, content)
|
|
}
|
|
|
|
func testInvalidPostReferenceEmptyAt() throws {
|
|
let content = "this is a @ mention"
|
|
let parsed = parse_post_blocks(content: content)
|
|
XCTAssertEqual(parsed.count, 1)
|
|
guard case .text(let txt) = parsed[0] else {
|
|
XCTAssert(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(txt, content)
|
|
}
|
|
|
|
func testFunnyUriReference() throws {
|
|
let id = "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de"
|
|
let content = "this is a nostr:&\(id):\(id) event mention"
|
|
let parsed = parse_post_blocks(content: content)
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 3)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
XCTAssertTrue(parsed[1].is_ref)
|
|
XCTAssertTrue(parsed[2].is_text)
|
|
|
|
guard case .ref(let ref) = parsed[1] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(ref.ref_id, id)
|
|
XCTAssertEqual(ref.key, "e")
|
|
XCTAssertNil(ref.relay_id)
|
|
|
|
guard case .text(let t1) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t1, "this is a nostr:")
|
|
|
|
guard case .text(let t2) = parsed[2] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t2, ":\(id) event mention")
|
|
}
|
|
|
|
func testInvalidUriReference() throws {
|
|
let id = "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de"
|
|
let content = "this is a nostr:z:\(id) event mention"
|
|
let parsed = parse_post_blocks(content: content)
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 1)
|
|
|
|
guard case .text(let txt) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(txt, content)
|
|
}
|
|
|
|
func testParsePostUriPubkeyReference() throws {
|
|
let id = "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de"
|
|
let parsed = parse_post_blocks(content: "this is a nostr:p:\(id) event mention")
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 3)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
XCTAssertTrue(parsed[1].is_ref)
|
|
XCTAssertTrue(parsed[2].is_text)
|
|
|
|
guard case .ref(let ref) = parsed[1] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(ref.ref_id, id)
|
|
XCTAssertEqual(ref.key, "p")
|
|
XCTAssertNil(ref.relay_id)
|
|
|
|
guard case .text(let t1) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t1, "this is a ")
|
|
|
|
guard case .text(let t2) = parsed[2] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t2, " event mention")
|
|
}
|
|
|
|
func testParsePostUriReference() throws {
|
|
let id = "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de"
|
|
let parsed = parse_post_blocks(content: "this is a nostr:e:\(id) event mention")
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 3)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
XCTAssertTrue(parsed[1].is_ref)
|
|
XCTAssertTrue(parsed[2].is_text)
|
|
|
|
guard case .ref(let ref) = parsed[1] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(ref.ref_id, id)
|
|
XCTAssertEqual(ref.key, "e")
|
|
XCTAssertNil(ref.relay_id)
|
|
|
|
guard case .text(let t1) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t1, "this is a ")
|
|
|
|
guard case .text(let t2) = parsed[2] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t2, " event mention")
|
|
}
|
|
|
|
func testParsePostEventReference() throws {
|
|
let pk = "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de"
|
|
let parsed = parse_post_blocks(content: "this is a &\(pk) event mention")
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 3)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
XCTAssertTrue(parsed[1].is_ref)
|
|
XCTAssertTrue(parsed[2].is_text)
|
|
|
|
guard case .ref(let ref) = parsed[1] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(ref.ref_id, pk)
|
|
XCTAssertEqual(ref.key, "e")
|
|
XCTAssertNil(ref.relay_id)
|
|
|
|
guard case .text(let t1) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t1, "this is a ")
|
|
|
|
guard case .text(let t2) = parsed[2] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t2, " event mention")
|
|
}
|
|
|
|
func testParsePostPubkeyReference() throws {
|
|
let pk = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"
|
|
let parsed = parse_post_blocks(content: "this is a @\(pk) mention")
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 3)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
XCTAssertTrue(parsed[1].is_ref)
|
|
XCTAssertTrue(parsed[2].is_text)
|
|
|
|
guard case .ref(let ref) = parsed[1] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(ref.ref_id, pk)
|
|
XCTAssertEqual(ref.key, "p")
|
|
XCTAssertNil(ref.relay_id)
|
|
|
|
guard case .text(let t1) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t1, "this is a ")
|
|
|
|
guard case .text(let t2) = parsed[2] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
XCTAssertEqual(t2, " mention")
|
|
}
|
|
|
|
func testParseInvalidMention() throws {
|
|
let parsed = parse_mentions(content: "this is #[0] a mention", tags: [])
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 1)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
|
|
guard case .text(let txt) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(txt, "this is #[0] a mention")
|
|
}
|
|
|
|
func testParseMentionWithMarkdown() {
|
|
let md = """
|
|
Testing markdown in damus
|
|
|
|
**bold**
|
|
|
|
_italics_
|
|
|
|
`monospace`
|
|
|
|
# h1
|
|
|
|
## h2
|
|
|
|
### h3
|
|
|
|
* list1
|
|
* list2
|
|
|
|
> some awesome quote
|
|
|
|
[my website](https://jb55.com)
|
|
"""
|
|
|
|
let parsed = parse_mentions(content: md, tags: [])
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 1)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
}
|
|
|
|
func testParseMentionBlank() {
|
|
let parsed = parse_mentions(content: "", tags: [["e", "event_id"]])
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 0)
|
|
}
|
|
|
|
func testParseMentionOnlyText() {
|
|
let parsed = parse_mentions(content: "there is no mention here", tags: [["e", "event_id"]])
|
|
|
|
XCTAssertNotNil(parsed)
|
|
XCTAssertEqual(parsed.count, 1)
|
|
XCTAssertTrue(parsed[0].is_text)
|
|
|
|
guard case .text(let txt) = parsed[0] else {
|
|
XCTAssertTrue(false)
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(txt, "there is no mention here")
|
|
}
|
|
|
|
}
|