mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Cosmetics.
This commit is contained in:
parent
a02b55c5b1
commit
93d1052f06
1 changed files with 982 additions and 961 deletions
|
@ -26,10 +26,10 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
|
|||
import org.eclipse.cdt.core.tests.FailingTest;
|
||||
|
||||
public class RenameRegressionTests extends RenameTests {
|
||||
|
||||
public RenameRegressionTests() {
|
||||
super();
|
||||
}
|
||||
|
||||
public RenameRegressionTests(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
@ -37,8 +37,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
public static Test suite(){
|
||||
return suite(true);
|
||||
}
|
||||
public static Test suite( boolean cleanup ) {
|
||||
|
||||
public static Test suite(boolean cleanup) {
|
||||
TestSuite innerSuite= new TestSuite(RenameRegressionTests.class);
|
||||
innerSuite.addTest(new FailingTest(new RenameRegressionTests("_testMethod_35_72726"),72726)); //$NON-NLS-1$
|
||||
|
||||
|
@ -163,6 +163,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("Boo/*vp1*/"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Boo a"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testAttribute_2() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Boo{ \n"); //$NON-NLS-1$
|
||||
|
@ -182,6 +183,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("att1;//vp1,res1"), 4, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("att1;//res2"), 4, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testMethod_1() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -226,7 +228,6 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("method1();//res2"), 7, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
|
||||
public void testConstructor_26() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Boo{ \n"); //$NON-NLS-1$
|
||||
|
@ -247,6 +248,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
}
|
||||
fail ("An error should have occurred in the input check."); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
// The constructor name is accepted, but the refactoring doesn't remove the return
|
||||
// type and there is a compile error. Renaming to a constructor should be disabled.
|
||||
// However, the UI does display the error in the preview panel. Defect 78769 states
|
||||
|
@ -274,6 +276,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
}
|
||||
fail ("An error should have occurred in the input check."); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void testDestructor_28() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Boo{ \n"); //$NON-NLS-1$
|
||||
|
@ -295,6 +298,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
}
|
||||
fail ("An error should have occurred in the input check."); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void testDestructor_29_72612() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Boo{ \n"); //$NON-NLS-1$
|
||||
|
@ -317,6 +321,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
}
|
||||
fail ("An error should have occurred in the input check."); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void testFunction_31() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("void foo(){} \n"); //$NON-NLS-1$
|
||||
|
@ -335,8 +340,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, file, contents.indexOf("foo/*vp1*/"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("foo(3)"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testMethod_32_72717() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Base { \n"); //$NON-NLS-1$
|
||||
|
@ -374,7 +379,6 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, file, contents.indexOf("aMethod/*vp1*/"), 7, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("aMethod(int x)"), 7, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testMethod_33b_72605() throws Exception {
|
||||
|
@ -420,8 +424,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, file, contents.indexOf("v/*vp1*/"), 1, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("v(){}"), 1, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
// defect is input for new name is not allowed
|
||||
public void _testMethod_35_72726() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
|
@ -451,6 +455,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("operator==(const"), 11, "operator="); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testMethod_39() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -487,8 +492,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, h, header.indexOf("method2"), 7, "m2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("method2(int"), 7, "m2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("method2(3"), 7, "m2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testMethod_40() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -524,7 +529,6 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, h, header.indexOf("method2/*vp2*/"), 7, "m2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("method2(int x"), 7, "m2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("method2(3"), 7, "m2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testMethod_41() throws Exception {
|
||||
|
@ -556,8 +560,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, h, header.indexOf("method1/*vp1*/"), 7, "m1"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("method1(int x"), 7, "m1"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("method1(1"), 7, "m1"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testMethod_43() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -585,8 +589,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, h, header.indexOf("method1/*vp1*/"), 7, "m1"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("method1(1"), 7, "m1"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testMethod_44() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Base{ \n"); //$NON-NLS-1$
|
||||
|
@ -611,6 +615,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("v/*vp1*/"), 1, "v1"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("v(){i++;}"), 1, "v1"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testMethod_45() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Base{ \n"); //$NON-NLS-1$
|
||||
|
@ -675,6 +680,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("st3/*vp3*/"), 3, "Ooga3"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("st3 ss"), 3, "Ooga3"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testUnion_47() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("union st1/*vp1*/{}; \n"); //$NON-NLS-1$
|
||||
|
@ -713,6 +719,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("st3/*vp3*/"), 3, "Ooga3"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("st3 ss"), 3, "Ooga3"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testEnumeration_48() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("enum e1/*vp1*/{E0}; \n"); //$NON-NLS-1$
|
||||
|
@ -751,6 +758,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("e3/*vp3*/"), 2, "Ooga3"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("e3 ss"), 2, "Ooga3"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testTemplate_49_72626() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("template <class Type> \n"); //$NON-NLS-1$
|
||||
|
@ -774,6 +782,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, offset=contents.indexOf("Array", offset+1), 5, "Arr2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, offset=contents.indexOf("Array", offset+1), 5, "Arr2"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testClass_52() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("namespace N1 { \n"); //$NON-NLS-1$
|
||||
|
@ -796,6 +805,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("Boo/*vp1*/"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Boo c2"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testClass_53() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo/*vp1*/ {//ren1 \n"); //$NON-NLS-1$
|
||||
|
@ -826,6 +836,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("Foo();//ren8,9"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Foo();//ren10"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testAttribute_54() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Boo{ \n"); //$NON-NLS-1$
|
||||
|
@ -847,6 +858,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("att;//rn2"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("att;//rn3"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testClass_55() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -871,6 +883,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("Hoo::Hoo(){}"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Hoo(){}"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testClass_55_79231() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Boo{};//vp1 \n"); //$NON-NLS-1$
|
||||
|
@ -911,6 +924,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("Foo *somePtr"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Foo*>(0)"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testClass_56() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{};//vp1,rn1 \n"); //$NON-NLS-1$
|
||||
|
@ -930,6 +944,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("Foo{//rn2"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Foo(){}//rn3"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testAttribute_61() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -949,8 +964,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, h, header.indexOf("count"), 5, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("count"), 5, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testEnumerator_62() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("enum Foo{E0, E1};//vp1 \n"); //$NON-NLS-1$
|
||||
|
@ -973,8 +988,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, h, header.indexOf("E1"), 2, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("E1"), 2, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testAttribute_63() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -997,8 +1012,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, h, header.indexOf("att"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("att"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testAttribute_64() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class Foo{ \n"); //$NON-NLS-1$
|
||||
|
@ -1023,8 +1038,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, h, header.indexOf("b;//vp1"), 1, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, h, header.indexOf("b;//rn2"), 1, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testAttribute_65() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class A{ \n"); //$NON-NLS-1$
|
||||
|
@ -1051,8 +1066,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, h, header.indexOf("att"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, cpp, source.indexOf("att;"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testNamespace_66() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("namespace Foo/*vp1*/{ \n"); //$NON-NLS-1$
|
||||
|
@ -1079,7 +1094,6 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(2, changes);
|
||||
assertChange(changes, file, contents.indexOf("Baz/*vp2*/"), 3, "Wooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Baz;"), 3, "Wooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
public void testNamespace_66_79281() throws Exception {
|
||||
|
@ -1115,6 +1129,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("Foo/*vp1*/"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("Foo;"), 3, "Ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testFunction_67() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("void foo/*vp1*/(){}//rn1 \n"); //$NON-NLS-1$
|
||||
|
@ -1136,6 +1151,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("foo();//rn2"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("foo();}//rn3"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testVariable_68() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class A{ \n"); //$NON-NLS-1$
|
||||
|
@ -1160,6 +1176,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertChange(changes, file, contents.indexOf("var.i;//rn2"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
assertChange(changes, file, contents.indexOf("var.i=3;//rn3"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
public void testVariable_68_79295() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("int var;//vp1 \n"); //$NON-NLS-1$
|
||||
|
@ -1175,6 +1192,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(1, changes);
|
||||
assertChange(changes, file, contents.indexOf("var;//vp1"), 3, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
|
||||
// similar to test 92, except this one will continue with warning, or error status
|
||||
// while case in 92 must stop refactor with fatal status
|
||||
public void testClass_81_72620() throws Exception {
|
||||
|
@ -1192,6 +1210,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
}
|
||||
fail ("An error should have occurred in the input check."); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void testVariable_88_72617() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class A{}; \n"); //$NON-NLS-1$
|
||||
|
@ -1211,7 +1230,8 @@ public class RenameRegressionTests extends RenameTests {
|
|||
assertTotalChanges(1, changes);
|
||||
assertChange(changes, h, header.indexOf("a;//vp1"), 1, "ooga"); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
//2 ways to test name collistion on same type:
|
||||
|
||||
// Two ways to test name collision on same type:
|
||||
// if you don't know the error message, catch on getRefactorChanges
|
||||
// or if you want to verify a message or severity, use getRefactorMessages
|
||||
// and getRefactorSeverity
|
||||
|
@ -1233,6 +1253,7 @@ public class RenameRegressionTests extends RenameTests {
|
|||
}
|
||||
fail ("An error or warning should have occurred in the input check."); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void testClass_92B() throws Exception {
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("class A{}; \n"); //$NON-NLS-1$
|
||||
|
|
Loading…
Add table
Reference in a new issue