Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test Plan #17

Open
andxu opened this issue Nov 23, 2017 · 24 comments
Open

Test Plan #17

andxu opened this issue Nov 23, 2017 · 24 comments

Comments

@andxu
Copy link
Collaborator

andxu commented Nov 23, 2017

Hello World

  1. Create a new folder helloworld, create a file named App.java in this folder and filling the following codes:
public class App 
{
    public static void main( String[] args )
    {        
        System.out.println( "Hello World!" );
    }
}
  1. Set BP on println
  2. Press F5, verify for launch.json generated with right mainClass
  3. Press F5, verify for BP to be hit, verify variable args shows like String[0] (id=%d)
  4. Add watch args.toString() + " test", verify the result like [Ljava.lang.String;@726f3b58 test
  5. Input args.toString() + " test" in debug console, verify the same result in debug console and it is expandable.
  6. Verify stack with thread list and on paused thread and one stack:
    App.main(String[]) (App.java:5)
  7. Press F10, verify Hello World! in debug console.
  8. Press F5, verify program terminates.
@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Call Stack

  1. Open test project 2.callstack

  2. Open Bar.java, set BP on line 3

  3. Press F5, verify for launch.json generated with right projectName and mainClass

  4. Press F5, verify for BP to be hit, verify variable args shows i: 20 and this: Bar (id=^d)

  5. Verify the stackframe shows:

     Bar.testBar(int) (Bar.java:3)
     Foo.testFoo(int) (Foo.java:6)
     CallStack.main(String[]) (CallStack.java:4)
     
  6. Click the testFoo line in the call stack view, verify vscode views verify variable args shows j: 10 and this: Foo (id=^d) and this is expandable with only member bar: Bar (id=^d), the bar should not be expandable.

  7. Change j to 32 and switch to stackframe Bar.testBar(int) (Bar.java:3) and switch back to Foo.testFoo(int) (Foo.java:6), input j + 1 in debug console and verify 33 is diplayed.

  8. Add watch this.bar.toString() and verify the result "Bar@^d" (id=^d)

  9. Add watch "test" + new Bar().hashCode() and verify the result "test^d" (id=^d)

  10. Add watch bar.testBar(j + 10) and verify there is a message This is test method in bar. printed in debug console.

  11. Press F5, verify program terminates.

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Multiple Thread

  1. Open test project 3.thread
  2. Set 2 BPs on println statement
  3. Press F5 choose java and F5 again to start debug
  4. Keep F5 down, and verify 2 BPs to be hit in turn.
  5. Stop presss F5 down, verify stackframe
     ThreadTest.lambda$1(AtomicInteger,Object) /(ThreadTest.java:22^(or 13)) 
     ^d.run() (Unknown Source:-1) 
     Thread.run() (Thread.java:748)
     
  6. Click stop button, verify program terminates.

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Variables

  1. Open test project 4.variable

  2. Set BP on the last statement of VariableTest#test

  3. Press F5 choose java and F5 again to start debug and wait for BP to be hit

  4. Verify

    1. i should be 111
    2. nullstr should be null
    3. str should be full displayed with 1000 a
    4. object should be Object (id=^d) and not expandable
    5. test should be VariableTest (id=^d) and expandable with x (VariableTest): 100, i:19099 and x (Foo): 0
    6. a is not expandable
    7. b is displayed as Class (A) (id=^d) and expand b->classLoader, there should be no errors on logs
    8. intarray should have 3 integers 1, 2, 3
    9. strList should have children size: 2 and expandable elementData, expand elementData, a long string string test aaaaaaa... should be displayed
    10. map should have size: 1 and expandable table with a HashMap$Node child.
    11. t should have one element hello
    12. genericArray should be displayed String[10][] (id=^d) with first non-empty element
    13. multi should be displayed String[5][][] (id=^d) and two levels expandable tree nodes.
    14. d should not be expandable
    15. dd should be displayed as GenericsFoo (id=^d) and should have one child x: Foo (id=^d) with only one child x: 0
    16. list should have only one element of int[1] (id=^d) at index 0
    17. this variable should be displayed
  5. set value on test->x (VariableTest), input value 1, verify this->x (VariableTest) has also been changed to 1

  6. Open user settings and set

    "java.debug.settings.showHex": true,
     "java.debug.settings.maxStringLength": 10,
     "java.debug.settings.showQualifiedNames": true,
     "java.debug.settings.showStaticVariables": false, 
  7. verify

    1. numbers are displayed in hex, and static variable is hiden and class names have been changed to fully qualified, str should be changed to "string ..." (id=0x^d)
  8. add watch this.hashCode() verify the result should be hex format.

  9. add watch str + str.length() in debug console, verify the result "string ..." (id=0x^d)

  10. Press F5, verify program terminates.

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Big stack frame

  1. Open test project 6. recursivefunction
  2. Open RecursiveTest.java, and set BP on line 8: return 1
  3. Press F5 choose java and F5 again to start debug and wait for BP to be hit
  4. Add watch number + 100 and verify the call stack list is a long list, and you can switch between them freely with changed arguments number and changed watch values
  5. click on the Load More Stack Frames button, verify you can click on it continually. (The total stack frame count is 1000, and vscode will load 20 of them in one page, so you can click Load More Stack Frames button about 50 times), verify there is no PERFORMANCE issue (no delay more than 1 second during the test steps).
  6. Press F5, verify program terminates.

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Breakpoint and innner class

  1. Open test project 5.breakpoint
  2. Change the code to:
class A {

    void m() {
        System.out.println("outer");
    }

    String n() {
        return "outer";
    }
}

public class BreakPointTest {
    public static void main(String[] args) {
        new BreakPointTest().go();
        int j = 0;
        new A() {
            @Override
            void m() {
                System.out.println("anonymous");
            }
        }.m();
        for (int i = 1; i <= 100; i++) {
            if (i <= 99) {
                j++;
            } else {
                System.out.println(j);
            }

        }
    }

    void go() {
        new A().m();
        class A {
            String n() {
                return "inner";
            }

            void m() {
                System.out.println("inner");
            }
        }
        new A().m();
    }

    static class A {
        String n() {
            return "middle";
        }

        void m() {
            System.out.println("middle");
        }
    }
}
  1. Set BP on each println statement
  2. Add watch new A().n()
  3. Press F5 to start debug, verify the line System.out.println("middle"); is hit, verify the watch result is middle
  4. Press F5 again, verify the line System.out.println("inner"); is hit, verify the watch result is displayed with red error message
  5. press F5 again and verify the line System.out.println("anonymous"); is hit and the watch result is middle
  6. press F5 again and verify the line System.out.println(j); is hit and the watch result is middle
  7. Press F5, verify the program stops, verify no error in logs.
  8. verify the following messages in debug console

    middle
    inner
    anonymous
    99

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Variable Performance Test

  1. Open test project 7.variableperformance
  2. Open TooManyVariables.java, and set BP on System.out.println("variable perf test.")
  3. Press F5 choose java and F5 again to start debug
  4. Open debug view and expand the ‘this’ variable in variable view.
  5. Verify the time for expanding are less than 5 seconds
  6. Press F5, verify program terminates.

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

No Debug Information Test

  1. Open test project 8.nosource
  2. Open NoSourceTest.java, and set breakpoint on line 4: System.out.println(i+10);
  3. Press F5 choose java and F5 again to start debug, verify the BP is hit
  4. Verify the following stack frames:
     NoSourceTest.lambda$0(Integer) (NoSourceTest.java:4)
     ^d.accept(Object) (Unknown Source:-1)
     Foo.bar(int,int,Consumer) (Unknown Source:-1)
     NoSourceTest.main(String[]) (NoSourceTest.java:3)
     
  5. Select stack frame Foo.bar(int,int,Consumer) (Unknown Source:-1), add watch this.hashCode() - arg0 and verify an integer as the result, verify watch new Foo() results in Foo (id=^d)
  6. Press F5, verify program terminates.

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Maven Test

  1. Open cmd.exe and create an empty folder and run mvn archetype:generate –DarchetypeArtifactId:maven-archetype-quickstart
    1. On Define value for property 'groupId' please input com.ms.samples
    2. On Define value for property 'artifactId' please input simple-app
    3. For other options, press Enter
  2. Open generated simple-app folder using vscode
  3. Wait and verify .project and .classpath files and target folder are generated.
  4. Set BP on the println
  5. Press F5 choose java and F5 again to start debug, verify the BP is hit
  6. Press F5, verify program terminates with output Hello World!

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

Gradle Test

  1. create a new folder and create file build.gradle with the following text:
    apply plugin: 'java'
    
    // Redefine where to look for app and test code 
    // In this example, our code is structured as:
    // project
    //   └── src
    //       ├── main
    //       │   ├── java
    //       │   └── resources
    sourceSets {
        main.java.srcDirs = ['src/main/java']     
    }
    
  2. copy the src/main folder from prevous test case Maven Test to this folder.
  3. Set BP on the println
  4. Press F5 choose java and F5 again to start debug, verify the BP is hit
  5. Press F5, verify program terminates with output Hello World!

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

PetClinic

  1. Clone code from https://github.com/spring-projects/spring-petclinic.git
  2. Open the cloned project and verify .project and .classpath files and target folder are generated.
  3. Set BP on WelcomeController.java on line return "welcome"; and main on PetClinicApplication.java
  4. Press F5 choose java and F5 again to start debug, verify the BP on main is hit.
  5. Press F5 and verify the BP on main is hit again.
  6. Wait for output 2017-11-23 20:23:25.230 INFO 9448 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
  7. Open IE and navigate to http://localhost:8080, verify the welcome method is hit
  8. Press F5 and verify page like spring-petclinic/target/classes/templates/welcome.html is displayed on IE with bad css.
  9. STOP debug and do the test again from step 4

@andxu
Copy link
Collaborator Author

andxu commented Nov 23, 2017

TODO application

  1. Clone code from https://github.com/Microsoft/todo-app-java-on-azure.git
  2. Open the cloned project and verify .project and .classpath files and target folder are generated.
  3. Open file todo-app-java-on-azure\src\main\resources\application.properties and replaces it with a test configuration(see my email attachment)
  4. Set BP on TodoListController.java on addNewTodoItem(@RequestBody TodoItem item) and main on TodoApplication.java
  5. Press F5 choose java and F5 again to start debug, verify the BP on main is hit.
  6. Press F5 to continue, open IE and open http://localhost:8080/#/TodoList and add a todo, press Button Add and verify the BP on addNewTodoItem is hit, wait a little time to load the stack frame.
  7. Press F10 and then Press F5, verify the todo item is added.

@ansyral
Copy link
Collaborator

ansyral commented Nov 28, 2017

Single file build

  1. Open file in folder 21.single-file.(Open folder or Open file)
  2. Press F5, make sure it debugs well.
  3. update the src to introduce a compilation error. For example, change String s = "1"; to String s = 1;. Then hit F5, check whether vscode pop out an error message "Build fails, do you want to proceed", click abort, make sure there is no more error message.

@testforstephen
Copy link
Collaborator

Console application

  1. Open project 23.console-app in vscode.
  2. Press F5 choose java and make sure launch.json is generated.
  3. Press F5 again to start debug.
  4. See VSCode DEBUG CONSOLE view, verify the program is blocking at the line Please input your name:.
  5. Terminate debugger.
  6. Go to launch.json, change the option console to integratedTerminal.
  7. Press F5 again.
  8. See VSCode TERMINAL view, and user can input his/her name there and the program continue to run.
  9. Terminate debugger.
    10.Go to launch.json, change the option console to externalTerminal.
  10. Press F5 again, and the debugger will pop up an external terminal (e.g. cmd.exe).
  11. User can input his/her name there and the program continue to run.

@testforstephen
Copy link
Collaborator

Java 9 modular application

  1. In your PC, install latest java 9 JDK, configure JAVA_HOME.
  2. Open project 19.java9-app in vscode.
  3. Press F5 choose java and verify launch.json is auto generated.
  4. Press F5 to start debug.
  5. Verify breakpoint and step work.
  6. Click Call Stack, it will open the associated source file in VSCode correctly.

@yaohaizh
Copy link
Collaborator

Multi-root

  1. Clone code from https://github.com/spring-projects/spring-petclinic.git
  2. Clone code https://github.com/Microsoft/todo-app-java-on-azure.git
  3. Open both above projects in the same VSCode windows under workspace features
  4. Navigate to the Debug view
  5. Generate configuration for sprintclinic
  6. Generate configuration for TODO
  7. Check both launch.json to see the selected project's main are generated.

@testforstephen
Copy link
Collaborator

testforstephen commented Dec 12, 2017

Step Filters

  1. Open project 19.java9-app in vscode.
  2. Follow gif to verify step filters feature.
    stepfilter

The new gif:
stepfilters

@yaohaizh
Copy link
Collaborator

yaohaizh commented Dec 18, 2017

Hot Code Replace

  1. Open project 24.hotCodeReplace in vscode.
  2. Set breakpoints: NameProvider.java line 12; Person.java line 13
  3. Press F5 to start debug.
  4. The program stopped at the Person.java line 13
  5. Change the value of the line "old" to "new"
  6. Save the document to trigger HCR. Check the breakpoint will stop at line 12
  7. Click F10 to step over, check the value of res on the debug view of local variable which should be new

@andxu
Copy link
Collaborator Author

andxu commented Mar 12, 2018

Conditional Breakpoints

  1. Open project simple-java in vscode, write the following code:
package com.ms.samples;

/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args )
    {
        int i = 0;
        for (; i <= 1000; i++) {
            if (i == 1000)  {
                System.out.println( "Hello World!" );        
            }
        }
        System.out.println( "Hello World!" );
    }
}  

  1. set conditional breakpoint on line 13 with condition i ==1000, F5 and wait the breakpoint to be hit

java-conditional-bp-demo

  1. verify i equals 1000 in variable window.
  2. F5 and wait for program to exit.

@yaohaizh
Copy link
Collaborator

Restart Frame

  1. Open project 25.restartFrame in vscode.
  2. Set breakpoint: Person.java line 28
  3. Press F5 to start debug.
  4. The program stopped at the Person.java line 28
  5. Open the debug view, find the call stack of current breakpoint
  6. Right click the HelloWorld$1.run(), choose Restart Frame. Result: It should fail with error message in the right corner.
  7. Right click the Persona.getInternalName(), choose Restart Frame. Result: The program stop at the entry of getInternalName
  8. Right click the Persona.getName(), choose Restart Frame. Result: The program stop at the entry of getName. The above call stacks are popped.

@testforstephen
Copy link
Collaborator

Encoding Test for project under chinese directory

  1. Find some project under chinese characters directory.
  2. Open it in vscode.
  3. Press F5 to start debug.
  4. Verify the program can be launched normally.

@testforstephen
Copy link
Collaborator

Encoding Test for text file encoding

  1. Open a hello world project, and print System.out.println("中文字符3323").
  2. Press F5 to start debug.
  3. Verify the output in DEBUG CONSOLE view is correctly displayed.

@bsaby
Copy link
Collaborator

bsaby commented Apr 26, 2018

Caught and Uncaught exceptions test

  1. Open project simple-java in vscode, change code from line12 to line16 with following code:
for (; i <= 1000; i++) {
     if (i == 1)  {
         throw new IllegalStateException();
      }
 }
  1. Open debug view and tick both Uncaught exceptions and Caught exeptions
  2. Press F5, verify progress stop at line 14
  3. Press F5 again, verify following messages in debug console
Exception in thread "main" java.lang.IllegalStateException
	at com.ms.samples.App.main(App.java:14)

@yaohaizh
Copy link
Collaborator

Restart Frame

  1. Open project 25.restartFrame in vscode.
  2. Set breakpoint: Person.java line 28
  3. Press F5 to start debug.
  4. The program stopped at the Person.java line 28
  5. Open the debug console, input s or g , the auto complete window will pop up with intellisense support.

@testforstephen
Copy link
Collaborator

Logpoint

  1. Open a project in vscode, and add a logpoint. The log message is the simple text message. If you want to print the expression, you need wrap it with a curly bracket { javaExpression }.
  2. Launch java debugger and continue your program.
  3. When the logpoint code branch is hit, it just log the message to the console and doesn't stop your program.

logpoint

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants