1d1d34bafSZixu Wang// RUN: rm -rf %t
2d1d34bafSZixu Wang// RUN: split-file %s %t
3*e08c4354SZixu Wang// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
4*e08c4354SZixu Wang// RUN: %t/reference.output.json.in >> %t/reference.output.json
5d1d34bafSZixu Wang// RUN: %clang -extract-api -x objective-c-header -target arm64-apple-macosx \
6d1d34bafSZixu Wang// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s
7d1d34bafSZixu Wang
8d1d34bafSZixu Wang// Generator version is not consistent across test runs, normalize it.
9d1d34bafSZixu Wang// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10d1d34bafSZixu Wang// RUN: %t/output.json >> %t/output-normalized.json
11d1d34bafSZixu Wang// RUN: diff %t/reference.output.json %t/output-normalized.json
12d1d34bafSZixu Wang
13d1d34bafSZixu Wang// CHECK-NOT: error:
14d1d34bafSZixu Wang// CHECK-NOT: warning:
15d1d34bafSZixu Wang
16d1d34bafSZixu Wang//--- input.h
17d1d34bafSZixu Wang@protocol Protocol
18d1d34bafSZixu Wang@end
19d1d34bafSZixu Wang
20d1d34bafSZixu Wang@protocol AnotherProtocol <Protocol>
21d1d34bafSZixu Wang@end
22d1d34bafSZixu Wang
23d1d34bafSZixu Wang//--- reference.output.json.in
24d1d34bafSZixu Wang{
25d1d34bafSZixu Wang  "metadata": {
26d1d34bafSZixu Wang    "formatVersion": {
27d1d34bafSZixu Wang      "major": 0,
28d1d34bafSZixu Wang      "minor": 5,
29d1d34bafSZixu Wang      "patch": 3
30d1d34bafSZixu Wang    },
31d1d34bafSZixu Wang    "generator": "?"
32d1d34bafSZixu Wang  },
33d1d34bafSZixu Wang  "module": {
34d1d34bafSZixu Wang    "name": "",
35d1d34bafSZixu Wang    "platform": {
36d1d34bafSZixu Wang      "architecture": "arm64",
37d1d34bafSZixu Wang      "operatingSystem": {
38d1d34bafSZixu Wang        "minimumVersion": {
39d1d34bafSZixu Wang          "major": 11,
40d1d34bafSZixu Wang          "minor": 0,
41d1d34bafSZixu Wang          "patch": 0
42d1d34bafSZixu Wang        },
43d1d34bafSZixu Wang        "name": "macosx"
44d1d34bafSZixu Wang      },
45d1d34bafSZixu Wang      "vendor": "apple"
46d1d34bafSZixu Wang    }
47d1d34bafSZixu Wang  },
4828d79314SDaniel Grumberg  "relationships": [
49d1d34bafSZixu Wang    {
50d1d34bafSZixu Wang      "kind": "conformsTo",
51d1d34bafSZixu Wang      "source": "c:objc(pl)AnotherProtocol",
52d1d34bafSZixu Wang      "target": "c:objc(pl)Protocol"
53d1d34bafSZixu Wang    }
54d1d34bafSZixu Wang  ],
55d1d34bafSZixu Wang  "symbols": [
56d1d34bafSZixu Wang    {
5728d79314SDaniel Grumberg      "accessLevel": "public",
58d1d34bafSZixu Wang      "declarationFragments": [
59d1d34bafSZixu Wang        {
60d1d34bafSZixu Wang          "kind": "keyword",
61d1d34bafSZixu Wang          "spelling": "@protocol"
62d1d34bafSZixu Wang        },
63d1d34bafSZixu Wang        {
64d1d34bafSZixu Wang          "kind": "text",
65d1d34bafSZixu Wang          "spelling": " "
66d1d34bafSZixu Wang        },
67d1d34bafSZixu Wang        {
68d1d34bafSZixu Wang          "kind": "identifier",
69d1d34bafSZixu Wang          "spelling": "Protocol"
70d1d34bafSZixu Wang        }
71d1d34bafSZixu Wang      ],
72d1d34bafSZixu Wang      "identifier": {
73d1d34bafSZixu Wang        "interfaceLanguage": "objective-c",
74d1d34bafSZixu Wang        "precise": "c:objc(pl)Protocol"
75d1d34bafSZixu Wang      },
76d1d34bafSZixu Wang      "kind": {
77d1d34bafSZixu Wang        "displayName": "Protocol",
78d1d34bafSZixu Wang        "identifier": "objective-c.protocol"
79d1d34bafSZixu Wang      },
80d1d34bafSZixu Wang      "location": {
8128d79314SDaniel Grumberg        "position": {
82d1d34bafSZixu Wang          "character": 11,
8328d79314SDaniel Grumberg          "line": 1
8428d79314SDaniel Grumberg        },
85d1d34bafSZixu Wang        "uri": "file://INPUT_DIR/input.h"
86d1d34bafSZixu Wang      },
87d1d34bafSZixu Wang      "names": {
8880ae3665SDaniel Grumberg        "navigator": [
8980ae3665SDaniel Grumberg          {
9080ae3665SDaniel Grumberg            "kind": "identifier",
9180ae3665SDaniel Grumberg            "spelling": "Protocol"
9280ae3665SDaniel Grumberg          }
9380ae3665SDaniel Grumberg        ],
94d1d34bafSZixu Wang        "subHeading": [
95d1d34bafSZixu Wang          {
96d1d34bafSZixu Wang            "kind": "identifier",
97d1d34bafSZixu Wang            "spelling": "Protocol"
98d1d34bafSZixu Wang          }
99d1d34bafSZixu Wang        ],
100d1d34bafSZixu Wang        "title": "Protocol"
10128d79314SDaniel Grumberg      },
10228d79314SDaniel Grumberg      "pathComponents": [
10328d79314SDaniel Grumberg        "Protocol"
10428d79314SDaniel Grumberg      ]
105d1d34bafSZixu Wang    },
106d1d34bafSZixu Wang    {
10728d79314SDaniel Grumberg      "accessLevel": "public",
108d1d34bafSZixu Wang      "declarationFragments": [
109d1d34bafSZixu Wang        {
110d1d34bafSZixu Wang          "kind": "keyword",
111d1d34bafSZixu Wang          "spelling": "@protocol"
112d1d34bafSZixu Wang        },
113d1d34bafSZixu Wang        {
114d1d34bafSZixu Wang          "kind": "text",
115d1d34bafSZixu Wang          "spelling": " "
116d1d34bafSZixu Wang        },
117d1d34bafSZixu Wang        {
118d1d34bafSZixu Wang          "kind": "identifier",
119d1d34bafSZixu Wang          "spelling": "AnotherProtocol"
120d1d34bafSZixu Wang        },
121d1d34bafSZixu Wang        {
122d1d34bafSZixu Wang          "kind": "text",
123d1d34bafSZixu Wang          "spelling": " <"
124d1d34bafSZixu Wang        },
125d1d34bafSZixu Wang        {
126d1d34bafSZixu Wang          "kind": "typeIdentifier",
127d1d34bafSZixu Wang          "preciseIdentifier": "c:objc(pl)Protocol",
128d1d34bafSZixu Wang          "spelling": "Protocol"
129d1d34bafSZixu Wang        },
130d1d34bafSZixu Wang        {
131d1d34bafSZixu Wang          "kind": "text",
132d1d34bafSZixu Wang          "spelling": ">"
133d1d34bafSZixu Wang        }
134d1d34bafSZixu Wang      ],
135d1d34bafSZixu Wang      "identifier": {
136d1d34bafSZixu Wang        "interfaceLanguage": "objective-c",
137d1d34bafSZixu Wang        "precise": "c:objc(pl)AnotherProtocol"
138d1d34bafSZixu Wang      },
139d1d34bafSZixu Wang      "kind": {
140d1d34bafSZixu Wang        "displayName": "Protocol",
141d1d34bafSZixu Wang        "identifier": "objective-c.protocol"
142d1d34bafSZixu Wang      },
143d1d34bafSZixu Wang      "location": {
14428d79314SDaniel Grumberg        "position": {
145d1d34bafSZixu Wang          "character": 11,
14628d79314SDaniel Grumberg          "line": 4
14728d79314SDaniel Grumberg        },
148d1d34bafSZixu Wang        "uri": "file://INPUT_DIR/input.h"
149d1d34bafSZixu Wang      },
150d1d34bafSZixu Wang      "names": {
15180ae3665SDaniel Grumberg        "navigator": [
15280ae3665SDaniel Grumberg          {
15380ae3665SDaniel Grumberg            "kind": "identifier",
15480ae3665SDaniel Grumberg            "spelling": "AnotherProtocol"
15580ae3665SDaniel Grumberg          }
15680ae3665SDaniel Grumberg        ],
157d1d34bafSZixu Wang        "subHeading": [
158d1d34bafSZixu Wang          {
159d1d34bafSZixu Wang            "kind": "identifier",
160d1d34bafSZixu Wang            "spelling": "AnotherProtocol"
161d1d34bafSZixu Wang          }
162d1d34bafSZixu Wang        ],
163d1d34bafSZixu Wang        "title": "AnotherProtocol"
16428d79314SDaniel Grumberg      },
16528d79314SDaniel Grumberg      "pathComponents": [
16628d79314SDaniel Grumberg        "AnotherProtocol"
16728d79314SDaniel Grumberg      ]
168d1d34bafSZixu Wang    }
169d1d34bafSZixu Wang  ]
170d1d34bafSZixu Wang}
171