1/*
2 * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @bug 7021614 8076026
27 * @summary extend com.sun.source API to support parsing javadoc comments
28 * @modules jdk.compiler/com.sun.tools.javac.api
29 *          jdk.compiler/com.sun.tools.javac.file
30 *          jdk.compiler/com.sun.tools.javac.tree
31 *          jdk.compiler/com.sun.tools.javac.util
32 * @build DocCommentTester
33 * @run main DocCommentTester AttrTest.java
34 */
35
36class AttrTest {
37    /**
38     * <a name=unquoted>foo</a>
39     */
40    void unquoted_attr() { }
41/*
42DocComment[DOC_COMMENT, pos:1
43  firstSentence: 3
44    StartElement[START_ELEMENT, pos:1
45      name:a
46      attributes: 1
47        Attribute[ATTRIBUTE, pos:4
48          name: name
49          vkind: UNQUOTED
50          value: 1
51            Text[TEXT, pos:9, unquoted]
52        ]
53    ]
54    Text[TEXT, pos:18, foo]
55    EndElement[END_ELEMENT, pos:21, a]
56  body: empty
57  block tags: empty
58]
59*/
60
61    /**
62     * <a name-test=hyphened>foo</a>
63     */
64    void hyphened_attr() { }
65/*
66DocComment[DOC_COMMENT, pos:1
67  firstSentence: 3
68    StartElement[START_ELEMENT, pos:1
69      name:a
70      attributes: 1
71        Attribute[ATTRIBUTE, pos:4
72          name: name-test
73          vkind: UNQUOTED
74          value: 1
75            Text[TEXT, pos:14, hyphened]
76        ]
77    ]
78    Text[TEXT, pos:23, foo]
79    EndElement[END_ELEMENT, pos:26, a]
80  body: empty
81  block tags: empty
82]
83*/
84
85    /**
86     * <a name="double_quoted">foo</a>
87     */
88    void double_quoted_attr() { }
89/*
90DocComment[DOC_COMMENT, pos:1
91  firstSentence: 3
92    StartElement[START_ELEMENT, pos:1
93      name:a
94      attributes: 1
95        Attribute[ATTRIBUTE, pos:4
96          name: name
97          vkind: DOUBLE
98          value: 1
99            Text[TEXT, pos:10, double_quoted]
100        ]
101    ]
102    Text[TEXT, pos:25, foo]
103    EndElement[END_ELEMENT, pos:28, a]
104  body: empty
105  block tags: empty
106]
107*/
108
109    /**
110     * <a name='single_quoted'>foo</a>
111     */
112    void single_quoted_attr() { }
113/*
114DocComment[DOC_COMMENT, pos:1
115  firstSentence: 3
116    StartElement[START_ELEMENT, pos:1
117      name:a
118      attributes: 1
119        Attribute[ATTRIBUTE, pos:4
120          name: name
121          vkind: SINGLE
122          value: 1
123            Text[TEXT, pos:10, single_quoted]
124        ]
125    ]
126    Text[TEXT, pos:25, foo]
127    EndElement[END_ELEMENT, pos:28, a]
128  body: empty
129  block tags: empty
130]
131*/
132
133    /**
134     * <hr size="3">
135     */
136    void numeric_attr() { }
137/*
138DocComment[DOC_COMMENT, pos:1
139  firstSentence: 1
140    StartElement[START_ELEMENT, pos:1
141      name:hr
142      attributes: 1
143        Attribute[ATTRIBUTE, pos:5
144          name: size
145          vkind: DOUBLE
146          value: 1
147            Text[TEXT, pos:11, 3]
148        ]
149    ]
150  body: empty
151  block tags: empty
152]
153*/
154
155    /**
156     * <a href="{@docRoot}/index.html">
157     */
158    void docRoot_attr() { }
159/*
160DocComment[DOC_COMMENT, pos:1
161  firstSentence: 1
162    StartElement[START_ELEMENT, pos:1
163      name:a
164      attributes: 1
165        Attribute[ATTRIBUTE, pos:4
166          name: href
167          vkind: DOUBLE
168          value: 2
169            DocRoot[DOC_ROOT, pos:10]
170            Text[TEXT, pos:20, /index.html]
171        ]
172    ]
173  body: empty
174  block tags: empty
175]
176*/
177
178    /**
179     * <a name="abc&quot;def">
180     */
181    void entity_attr() { }
182/*
183DocComment[DOC_COMMENT, pos:1
184  firstSentence: 1
185    StartElement[START_ELEMENT, pos:1
186      name:a
187      attributes: 1
188        Attribute[ATTRIBUTE, pos:4
189          name: name
190          vkind: DOUBLE
191          value: 3
192            Text[TEXT, pos:10, abc]
193            Entity[ENTITY, pos:13, quot]
194            Text[TEXT, pos:19, def]
195        ]
196    ]
197  body: empty
198  block tags: empty
199]
200*/
201
202    /**
203     * <hr noshade>
204     */
205    void no_value_attr() { }
206/*
207DocComment[DOC_COMMENT, pos:1
208  firstSentence: 1
209    StartElement[START_ELEMENT, pos:1
210      name:hr
211      attributes: 1
212        Attribute[ATTRIBUTE, pos:5
213          name: noshade
214          vkind: EMPTY
215          value: null
216        ]
217    ]
218  body: empty
219  block tags: empty
220]
221*/
222
223    /**
224     * abc <hr size='3'/>
225     */
226    void self_closing_attr_1() { }
227/*
228DocComment[DOC_COMMENT, pos:1
229  firstSentence: 2
230    Text[TEXT, pos:1, abc_]
231    StartElement[START_ELEMENT, pos:5
232      name:hr
233      attributes: 1
234        Attribute[ATTRIBUTE, pos:9
235          name: size
236          vkind: SINGLE
237          value: 1
238            Text[TEXT, pos:15, 3]
239        ]
240    ]
241  body: empty
242  block tags: empty
243]
244*/
245
246    /**
247     * abc <hr size=3 />
248     */
249    void self_closing_attr_2() { }
250/*
251DocComment[DOC_COMMENT, pos:1
252  firstSentence: 2
253    Text[TEXT, pos:1, abc_]
254    StartElement[START_ELEMENT, pos:5
255      name:hr
256      attributes: 1
257        Attribute[ATTRIBUTE, pos:9
258          name: size
259          vkind: UNQUOTED
260          value: 1
261            Text[TEXT, pos:14, 3]
262        ]
263    ]
264  body: empty
265  block tags: empty
266]
267*/
268
269    /**
270     * abc <hr size="3
271     */
272    void unterminated_attr_eoi() { }
273/*
274DocComment[DOC_COMMENT, pos:1
275  firstSentence: 3
276    Text[TEXT, pos:1, abc_]
277    Erroneous[ERRONEOUS, pos:5
278      code: compiler.err.dc.malformed.html
279      body: <
280    ]
281    Text[TEXT, pos:6, hr_size="3]
282  body: empty
283  block tags: empty
284]
285*/
286
287    /**
288     * abc <hr size="3
289     * @author jjg
290     */
291    void unterminated_attr_block() { }
292/*
293DocComment[DOC_COMMENT, pos:1
294  firstSentence: 3
295    Text[TEXT, pos:1, abc_]
296    Erroneous[ERRONEOUS, pos:5
297      code: compiler.err.dc.malformed.html
298      body: <
299    ]
300    Text[TEXT, pos:6, hr_size="3]
301  body: empty
302  block tags: 1
303    Author[AUTHOR, pos:18
304      name: 1
305        Text[TEXT, pos:26, jjg]
306    ]
307]
308*/
309}
310