10
10
*******************************************************************************/
11
11
package org.eclipse.cdt.ui.tests.refactoring.includes;
13
import java.util.List;
13
import java.util.Collections;
15
15
import junit.framework.Test;
17
import org.eclipse.jface.preference.IPreferenceStore;
17
18
import org.eclipse.jface.text.Document;
18
19
import org.eclipse.jface.text.IDocument;
19
20
import org.eclipse.text.edits.MultiTextEdit;
20
import org.eclipse.text.edits.TextEdit;
22
22
import org.eclipse.cdt.core.model.ITranslationUnit;
23
23
import org.eclipse.cdt.ui.PreferenceConstants;
25
import org.eclipse.cdt.internal.ui.refactoring.includes.HeaderSubstitutionMap;
25
26
import org.eclipse.cdt.internal.ui.refactoring.includes.IHeaderChooser;
27
import org.eclipse.cdt.internal.ui.refactoring.includes.IncludeMap;
26
28
import org.eclipse.cdt.internal.ui.refactoring.includes.IncludeOrganizer;
29
import org.eclipse.cdt.internal.ui.refactoring.includes.IncludePreferences;
30
import org.eclipse.cdt.internal.ui.refactoring.includes.IncludePreferences.UnusedStatementDisposition;
31
import org.eclipse.cdt.internal.ui.refactoring.includes.SymbolExportMap;
29
34
* Tests for {@link IncludeOrganizer}.
46
51
protected void resetPreferences() {
47
52
super.resetPreferences();
48
getPreferenceStore().setToDefault(PreferenceConstants.INCLUDES_UNUSED_STATEMENTS_DISPOSITION);
49
getPreferenceStore().setToDefault(PreferenceConstants.FORWARD_DECLARE_COMPOSITE_TYPES);
50
getPreferenceStore().setToDefault(PreferenceConstants.FORWARD_DECLARE_ENUMS);
51
getPreferenceStore().setToDefault(PreferenceConstants.FORWARD_DECLARE_FUNCTIONS);
52
getPreferenceStore().setToDefault(PreferenceConstants.FORWARD_DECLARE_TEMPLATES);
53
getPreferenceStore().setToDefault(PreferenceConstants.FORWARD_DECLARE_NAMESPACE_ELEMENTS);
54
getPreferenceStore().setToDefault(PreferenceConstants.INCLUDES_ALLOW_REORDERING);
53
IPreferenceStore preferenceStore = getPreferenceStore();
54
preferenceStore.setToDefault(PreferenceConstants.INCLUDES_UNUSED_STATEMENTS_DISPOSITION);
55
preferenceStore.setToDefault(PreferenceConstants.FORWARD_DECLARE_COMPOSITE_TYPES);
56
preferenceStore.setToDefault(PreferenceConstants.FORWARD_DECLARE_ENUMS);
57
preferenceStore.setToDefault(PreferenceConstants.FORWARD_DECLARE_FUNCTIONS);
58
preferenceStore.setToDefault(PreferenceConstants.FORWARD_DECLARE_TEMPLATES);
59
preferenceStore.setToDefault(PreferenceConstants.FORWARD_DECLARE_NAMESPACE_ELEMENTS);
60
preferenceStore.setToDefault(PreferenceConstants.INCLUDES_ALLOW_REORDERING);
61
preferenceStore.setToDefault(IncludePreferences.INCLUDES_HEADER_SUBSTITUTION);
62
preferenceStore.setToDefault(IncludePreferences.INCLUDES_SYMBOL_EXPORTING_HEADERS);
57
65
private void assertExpectedResults() throws Exception {
65
73
private String organizeIncludes(ITranslationUnit tu) throws Exception {
66
74
IHeaderChooser headerChooser = new FirstHeaderChooser();
67
75
IncludeOrganizer organizer = new IncludeOrganizer(tu, index, LINE_DELIMITER, headerChooser);
68
List<TextEdit> edits = organizer.organizeIncludes(ast);
76
MultiTextEdit edit = organizer.organizeIncludes(ast);
69
77
IDocument document = new Document(new String(tu.getContents()));
70
if (!edits.isEmpty()) {
72
MultiTextEdit edit = new MultiTextEdit();
73
edit.addChildren(edits.toArray(new TextEdit[edits.size()]));
76
79
return document.get();
296
299
assertExpectedResults();
309
//====================
314
public void testExistingPartnerIncludeIsNotRemoved() throws Exception {
315
IPreferenceStore preferenceStore = getPreferenceStore();
316
preferenceStore.setValue(PreferenceConstants.INCLUDES_UNUSED_STATEMENTS_DISPOSITION,
317
UnusedStatementDisposition.REMOVE.toString());
318
preferenceStore.setValue(PreferenceConstants.FORWARD_DECLARE_FUNCTIONS, true);
319
assertExpectedResults();
329
352
public void testHeaderExport() throws Exception {
330
353
assertExpectedResults();
b'\\ No newline at end of file'
360
//#include "h1.h" // IWYU pragma: export
369
//====================
374
public void testIndirectHeaderExport() throws Exception {
375
HeaderSubstitutionMap headerMap = new HeaderSubstitutionMap("Test", false,
376
new IncludeMap(true, new String[] { "h2.h", "h3.h"}),
377
new IncludeMap(false));
378
getPreferenceStore().setValue(IncludePreferences.INCLUDES_HEADER_SUBSTITUTION,
379
HeaderSubstitutionMap.serializeMaps(Collections.singletonList(headerMap)));
380
assertExpectedResults();
384
//#define M2(t, p) t p
388
//#define M1(x, y) M2(int, x) = y
396
//====================
400
public void testMacro() throws Exception {
401
IPreferenceStore preferenceStore = getPreferenceStore();
402
preferenceStore.setValue(PreferenceConstants.INCLUDES_UNUSED_STATEMENTS_DISPOSITION,
403
UnusedStatementDisposition.REMOVE.toString());
404
assertExpectedResults();
408
//#include "stddef.h"
409
//extern char* strchr(char* s, int c);
415
//#include "stddef.h"
418
// return strchr("aaa", '*');
420
//====================
421
//#include "string.h"
425
// return strchr("aaa", '*');
427
public void testExportedSymbol() throws Exception {
428
IPreferenceStore preferenceStore = getPreferenceStore();
429
preferenceStore.setValue(PreferenceConstants.INCLUDES_UNUSED_STATEMENTS_DISPOSITION,
430
UnusedStatementDisposition.REMOVE.toString());
431
SymbolExportMap symbolExportMap = new SymbolExportMap(new String[] { "NULL", "string.h" });
432
preferenceStore.setValue(IncludePreferences.INCLUDES_SYMBOL_EXPORTING_HEADERS,
433
SymbolExportMap.serializeMaps(Collections.singletonList(symbolExportMap)));
434
assertExpectedResults();
448
//====================
456
public void testSymbolToDeclareIsDefinedInIncludedHeader() throws Exception {
457
assertExpectedResults();
469
//====================
473
public void testVariableReference() throws Exception {
474
assertExpectedResults();
484
//C* f(const A& a, B* b) { return nullptr; }
491
//void test(ns3::ns2::A& a) {
492
// ns3::C* c = ns3::ns2::ns1::f(a, nullptr);
494
//====================
500
//} /* namespace ns2 */
501
//} /* namespace ns3 */
505
//C * f(const A &a, B *b);
506
//} /* namespace ns1 */
507
//} /* namespace ns2 */
508
//} /* namespace ns3 */
510
//void test(ns3::ns2::A& a) {
511
// ns3::C* c = ns3::ns2::ns1::f(a, nullptr);
513
public void testForwardDeclarations() throws Exception {
514
// TODO(sprigogin): Move ns1 outside of other namespaces after IncludeOrganizer starts using ASTWriter.
515
IPreferenceStore preferenceStore = getPreferenceStore();
516
preferenceStore.setValue(PreferenceConstants.INCLUDES_UNUSED_STATEMENTS_DISPOSITION,
517
UnusedStatementDisposition.REMOVE.toString());
518
preferenceStore.setValue(PreferenceConstants.FORWARD_DECLARE_FUNCTIONS, true);
519
assertExpectedResults();