File: ResourcesTests.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (139 lines) | stat: -rw-r--r-- 5,888 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import XCTest
@testable import SwiftDocC
import Markdown

class ResourcesTests: XCTestCase {
    func testEmpty() throws {
        let source = "@\(Resources.directiveName)"
        let document = Document(parsing: source, options: .parseBlockDirectives)
        let directive = document.child(at: 0)! as! BlockDirective
        let (bundle, context) = try testBundleAndContext(named: "TestBundle")
        var problems = [Problem]()
        let resources = Resources(from: directive, source: nil, for: bundle, in: context, problems: &problems)
        XCTAssertNil(resources)
        XCTAssertEqual(1, problems.count)
      
        XCTAssertEqual(
            [
                "org.swift.docc.Resources.HasContent",
            ],
            Set(problems.map { $0.diagnostic.identifier })
        )
        
        XCTAssert(problems.map { $0.diagnostic.severity }.allSatisfy { $0 == .warning })
    }
    
    func testValid() throws {
        let source = """
@\(Resources.directiveName) {
   Find the tools and a comprehensive set of resources for creating AR experiences on iOS.

   @\(Tile.DirectiveNames.documentation.rawValue)(destination: "https://www.example.com/documentation/technology") {
      Browse and search detailed API documentation.

      - <doc://org.swift.docc/arkit/augmented_reality_with_the_back_camera>
      - <doc://org.swift.docc/arkit/augmented_reality_with_the_front_camera>
   }

   @\(Tile.DirectiveNames.sampleCode.rawValue)(destination: "https://www.example.com/documentation/technology") {
      Browse and search detailed sample code.

      - <doc://org.swift.docc/arkit/augmented_reality_with_the_back_camera>
      - <doc://org.swift.docc/arkit/augmented_reality_with_the_front_camera>
   }

   @\(Tile.DirectiveNames.downloads.rawValue)(destination: "https://www.example.com/download") {
      Download Xcode 10, which includes the latest tools and SDKs.*
   }

   @\(Tile.DirectiveNames.videos.rawValue)(destination: "https://www.example.com/videos") {
      See AR presentation from WWDC and other events.
   }

   @\(Tile.DirectiveNames.forums.rawValue)(destination: "https://www.example.com/forums") {
      Discuss AR with Apple engineers and other developers.
   }
}
"""
        let document = Document(parsing: source, options: .parseBlockDirectives)
        let directive = document.child(at: 0)! as! BlockDirective
        let (bundle, context) = try testBundleAndContext(named: "TestBundle")
        var problems = [Problem]()
        let resources = Resources(from: directive, source: nil, for: bundle, in: context, problems: &problems)
        XCTAssertNotNil(resources)
        XCTAssertTrue(problems.isEmpty, "Unexpected problems: \(problems)")
        
        let expectedDump = """
Resources @1:1-29:2
├─ MarkupContainer (1 element)
├─ Tile @4:4-9:5 identifier: documentation title: 'Documentation' destination: 'https://www.example.com/documentation/technology'
│  └─ MarkupContainer (2 elements)
├─ Tile @11:4-16:5 identifier: sampleCode title: 'Sample Code' destination: 'https://www.example.com/documentation/technology'
│  └─ MarkupContainer (2 elements)
├─ Tile @18:4-20:5 identifier: downloads title: 'Xcode and SDKs' destination: 'https://www.example.com/download'
│  └─ MarkupContainer (1 element)
├─ Tile @22:4-24:5 identifier: videos title: 'Videos' destination: 'https://www.example.com/videos'
│  └─ MarkupContainer (1 element)
└─ Tile @26:4-28:5 identifier: forums title: 'Forums' destination: 'https://www.example.com/forums'
   └─ MarkupContainer (1 element)
"""
        resources.map {
            XCTAssertEqual(expectedDump, $0.dump())
        }
    }

    func testMissingLinksWarning() throws {
        let source = """
@\(Resources.directiveName) {
   Find the tools and a comprehensive set of resources for creating AR experiences on iOS.
   
   @\(Tile.DirectiveNames.documentation.rawValue)(destination: "https://www.example.com/documentation/technology") {
      Browse and search detailed API documentation.
   }

   @\(Tile.DirectiveNames.sampleCode.rawValue)(destination: "https://www.example.com/documentation/technology") {
      Browse and search sample projects.
   }

   @\(Tile.DirectiveNames.downloads.rawValue)(destination: "https://www.example.com/download") {
      Download Xcode 10, which includes the latest tools and SDKs.*
   }

   @\(Tile.DirectiveNames.videos.rawValue)(destination: "https://www.example.com/videos") {
      See AR presentation from WWDC and other events.
   }

   @\(Tile.DirectiveNames.forums.rawValue)(destination: "https://www.example.com/forums") {
      Discuss AR with Apple engineers and other developers.
   }
}
"""
        let document = Document(parsing: source, options: .parseBlockDirectives)
        let directive = document.child(at: 0)! as! BlockDirective
        let (bundle, context) = try testBundleAndContext(named: "TestBundle")
        var problems = [Problem]()
        let resources = Resources(from: directive, source: nil, for: bundle, in: context, problems: &problems)
        XCTAssertNotNil(resources)
        XCTAssertFalse(problems.containsErrors)
        
        // Two directives are supposed to have at least one link
        XCTAssertEqual(2, problems.count)
      
        // The two warnings have the same id
        XCTAssertEqual(Set([
            "org.swift.docc.Resources.SampleCode.HasLinks", 
            "org.swift.docc.Resources.Documentation.HasLinks",
            ]),
            Set(problems.map { $0.diagnostic.identifier }))
    }
}