forked from qt-creator/qt-creator
UnitTests: Fix names and disable slow tests by default
Slow and very slow tests have now their own test category. We add SlowTest for tests which are slower than ~5ms and VerySlowTest if they are slower than ~100ms. They are disabled them by "-*SlowTest.*". If you have a faster machine than most developers simply try lower values. The aim is that most developers can execute the tests in under ~2s. In the long run we should use dependency breaking and data sharing to reduce the count of the slow tests. Change-Id: I8578071258d7f89b2052709f3dd526ced811483f Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
@@ -161,7 +161,9 @@ protected:
|
||||
Document briefCommentDocument{Utf8StringLiteral(TESTDATA_DIR"/complete_extractor_brief_comment.cpp"), project, Utf8StringVector(), documents};
|
||||
};
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Function)
|
||||
using CodeCompletionsExtractorSlowTest = CodeCompletionsExtractor;
|
||||
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Function)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -172,7 +174,7 @@ TEST_F(CodeCompletionsExtractor, Function)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, TemplateFunction)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, TemplateFunction)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -183,7 +185,7 @@ TEST_F(CodeCompletionsExtractor, TemplateFunction)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Variable)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Variable)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 4));
|
||||
|
||||
@@ -194,7 +196,7 @@ TEST_F(CodeCompletionsExtractor, Variable)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(NonTypeTemplateParameter))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(NonTypeTemplateParameter))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 25, 19));
|
||||
|
||||
@@ -206,7 +208,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(NonTypeTemplateParameter))
|
||||
}
|
||||
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, VariableReference)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, VariableReference)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 12));
|
||||
|
||||
@@ -217,7 +219,7 @@ TEST_F(CodeCompletionsExtractor, VariableReference)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Parameter)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Parameter)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 4));
|
||||
|
||||
@@ -228,7 +230,7 @@ TEST_F(CodeCompletionsExtractor, Parameter)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Field)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Field)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 20));
|
||||
|
||||
@@ -239,7 +241,7 @@ TEST_F(CodeCompletionsExtractor, Field)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Class))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Class))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -250,7 +252,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Class))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Struct))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Struct))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -261,7 +263,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Struct))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Union))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Union))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -272,7 +274,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Union))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Typedef))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Typedef))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -283,7 +285,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(Typedef))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(UsingAsTypeAlias))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(UsingAsTypeAlias))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -294,7 +296,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(UsingAsTypeAlias))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(TemplateTypeParameter))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateTypeParameter))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -305,7 +307,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(TemplateTypeParameter))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(TemplateClass))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateClass))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -316,7 +318,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(TemplateClass))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(TemplateTemplateParameter))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateTemplateParameter))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -327,7 +329,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(TemplateTemplateParameter))
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(ClassTemplatePartialSpecialization))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(ClassTemplatePartialSpecialization))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -338,7 +340,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(ClassTemplatePartialSpecial
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Namespace)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Namespace)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(namespaceDocument, 20));
|
||||
|
||||
@@ -349,7 +351,7 @@ TEST_F(CodeCompletionsExtractor, Namespace)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, NamespaceAlias)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, NamespaceAlias)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(namespaceDocument, 20));
|
||||
|
||||
@@ -360,7 +362,7 @@ TEST_F(CodeCompletionsExtractor, NamespaceAlias)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Enumeration)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Enumeration)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
|
||||
|
||||
@@ -371,7 +373,7 @@ TEST_F(CodeCompletionsExtractor, Enumeration)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Enumerator)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Enumerator)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
|
||||
|
||||
@@ -382,7 +384,7 @@ TEST_F(CodeCompletionsExtractor, Enumerator)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_Constructor)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_Constructor)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(constructorDocument, 20));
|
||||
|
||||
@@ -393,7 +395,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_Constructor)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Destructor)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Destructor)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(constructorDocument, 20));
|
||||
|
||||
@@ -404,7 +406,7 @@ TEST_F(CodeCompletionsExtractor, Destructor)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Method)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Method)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -416,7 +418,7 @@ TEST_F(CodeCompletionsExtractor, Method)
|
||||
ASSERT_FALSE(extractor.currentCodeCompletion().hasParameters());
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, MethodWithParameters)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, MethodWithParameters)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -428,7 +430,7 @@ TEST_F(CodeCompletionsExtractor, MethodWithParameters)
|
||||
ASSERT_TRUE(extractor.currentCodeCompletion().hasParameters());
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Slot)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Slot)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -439,7 +441,7 @@ TEST_F(CodeCompletionsExtractor, Slot)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, Signal)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, Signal)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -450,7 +452,7 @@ TEST_F(CodeCompletionsExtractor, Signal)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, MacroDefinition)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, MacroDefinition)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 35));
|
||||
|
||||
@@ -461,7 +463,7 @@ TEST_F(CodeCompletionsExtractor, MacroDefinition)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, FunctionMacro)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, FunctionMacro)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -472,7 +474,7 @@ TEST_F(CodeCompletionsExtractor, FunctionMacro)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, IntKeyword)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, IntKeyword)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -483,7 +485,7 @@ TEST_F(CodeCompletionsExtractor, IntKeyword)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, SwitchKeyword)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, SwitchKeyword)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -494,7 +496,7 @@ TEST_F(CodeCompletionsExtractor, SwitchKeyword)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, ClassKeyword)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, ClassKeyword)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -505,7 +507,7 @@ TEST_F(CodeCompletionsExtractor, ClassKeyword)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DeprecatedFunction)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DeprecatedFunction)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -516,7 +518,7 @@ TEST_F(CodeCompletionsExtractor, DeprecatedFunction)
|
||||
CodeCompletion::Deprecated));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, NotAccessibleFunction)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, NotAccessibleFunction)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -527,7 +529,7 @@ TEST_F(CodeCompletionsExtractor, NotAccessibleFunction)
|
||||
CodeCompletion::NotAccessible));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, NotAvailableFunction)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, NotAvailableFunction)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -538,7 +540,7 @@ TEST_F(CodeCompletionsExtractor, NotAvailableFunction)
|
||||
CodeCompletion::NotAvailable));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, UnsavedFile)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, UnsavedFile)
|
||||
{
|
||||
Document document(Utf8String::fromUtf8(TESTDATA_DIR"/complete_extractor_function.cpp"), project, Utf8StringVector(), documents);
|
||||
unsavedFiles.createOrUpdate({unsavedDataFileContainer(TESTDATA_DIR"/complete_extractor_function.cpp",
|
||||
@@ -552,7 +554,7 @@ TEST_F(CodeCompletionsExtractor, UnsavedFile)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, ChangeUnsavedFile)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, ChangeUnsavedFile)
|
||||
{
|
||||
Document document(Utf8String::fromUtf8(TESTDATA_DIR"/complete_extractor_function.cpp"), project, Utf8StringVector(), documents);
|
||||
unsavedFiles.createOrUpdate({unsavedDataFileContainer(TESTDATA_DIR"/complete_extractor_function.cpp",
|
||||
@@ -569,7 +571,7 @@ TEST_F(CodeCompletionsExtractor, ChangeUnsavedFile)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, ArgumentDefinition)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, ArgumentDefinition)
|
||||
{
|
||||
project.setArguments({Utf8StringLiteral("-DArgumentDefinition"), Utf8StringLiteral("-std=gnu++14")});
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 35));
|
||||
@@ -581,7 +583,7 @@ TEST_F(CodeCompletionsExtractor, ArgumentDefinition)
|
||||
CodeCompletion::Available));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, NoArgumentDefinition)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, NoArgumentDefinition)
|
||||
{
|
||||
project.setArguments({Utf8StringLiteral("-std=gnu++14")});
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 35));
|
||||
@@ -593,7 +595,7 @@ TEST_F(CodeCompletionsExtractor, NoArgumentDefinition)
|
||||
CodeCompletion::Available)));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, CompletionChunksFunction)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksFunction)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -606,7 +608,7 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksFunction)
|
||||
{CodeCompletionChunk::RightParen, Utf8StringLiteral(")")}})));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, CompletionChunksFunctionWithOptionalChunks)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksFunctionWithOptionalChunks)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
|
||||
|
||||
@@ -624,7 +626,7 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksFunctionWithOptionalChunks)
|
||||
{CodeCompletionChunk::RightParen, Utf8StringLiteral(")")}})));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, CompletionChunksField)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksField)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(variableDocument, 20));
|
||||
|
||||
@@ -635,7 +637,7 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksField)
|
||||
{CodeCompletionChunk::TypedText, Utf8StringLiteral("Field")}})));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, CompletionChunksEnumerator)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksEnumerator)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
|
||||
|
||||
@@ -646,7 +648,7 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksEnumerator)
|
||||
{CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumerator")}})));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, CompletionChunksEnumeration)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksEnumeration)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
|
||||
|
||||
@@ -656,7 +658,7 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksEnumeration)
|
||||
CodeCompletionChunks({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumeration")}})));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(CompletionChunksClass))
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(CompletionChunksClass))
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
|
||||
|
||||
@@ -666,7 +668,7 @@ TEST_F(CodeCompletionsExtractor, DISABLED_ON_WINDOWS(CompletionChunksClass))
|
||||
CodeCompletionChunks({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Class")}})));
|
||||
}
|
||||
|
||||
TEST_F(CodeCompletionsExtractor, BriefComment)
|
||||
TEST_F(CodeCompletionsExtractorSlowTest, BriefComment)
|
||||
{
|
||||
ClangCodeCompleteResults completeResults(getResults(briefCommentDocument, 10, 1,
|
||||
/*needsReparse=*/ true));
|
||||
|
||||
Reference in New Issue
Block a user