mirror of
				https://github.com/go-delve/delve.git
				synced 2025-11-04 06:32:16 +08:00 
			
		
		
		
	* service/dap: filter goroutines * adjust defaults * add tests * remove label change * fix typos * send invalidated areas * respond to review, and allow to clear goroutineFilters
		
			
				
	
	
		
			198 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package dap
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestListConfig(t *testing.T) {
 | 
						|
	type args struct {
 | 
						|
		args *launchAttachArgs
 | 
						|
	}
 | 
						|
	tests := []struct {
 | 
						|
		name string
 | 
						|
		args args
 | 
						|
		want string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name: "empty",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{},
 | 
						|
			},
 | 
						|
			want: formatConfig(0, false, false, "", false, [][2]string{}),
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "default values",
 | 
						|
			args: args{
 | 
						|
				args: &defaultArgs,
 | 
						|
			},
 | 
						|
			want: formatConfig(50, false, false, "", false, [][2]string{}),
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "custom values",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					StackTraceDepth:              35,
 | 
						|
					ShowGlobalVariables:          true,
 | 
						|
					substitutePathClientToServer: [][2]string{{"hello", "world"}},
 | 
						|
					substitutePathServerToClient: [][2]string{{"world", "hello"}},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: formatConfig(35, true, false, "", false, [][2]string{{"hello", "world"}}),
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			if got := listConfig(tt.args.args); got != tt.want {
 | 
						|
				t.Errorf("listConfig() = %v, want %v", got, tt.want)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestConfigureSetSubstitutePath(t *testing.T) {
 | 
						|
	type args struct {
 | 
						|
		args *launchAttachArgs
 | 
						|
		rest string
 | 
						|
	}
 | 
						|
	tests := []struct {
 | 
						|
		name      string
 | 
						|
		args      args
 | 
						|
		wantRules [][2]string
 | 
						|
		wantErr   bool
 | 
						|
	}{
 | 
						|
		// Test add rule.
 | 
						|
		{
 | 
						|
			name: "add rule",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					substitutePathClientToServer: [][2]string{},
 | 
						|
					substitutePathServerToClient: [][2]string{},
 | 
						|
				},
 | 
						|
				rest: "/path/to/client/dir /path/to/server/dir",
 | 
						|
			},
 | 
						|
			wantRules: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
 | 
						|
			wantErr:   false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "add rule (multiple)",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					substitutePathClientToServer: [][2]string{
 | 
						|
						{"/path/to/client/dir/a", "/path/to/server/dir/a"},
 | 
						|
						{"/path/to/client/dir/b", "/path/to/server/dir/b"},
 | 
						|
					},
 | 
						|
					substitutePathServerToClient: [][2]string{
 | 
						|
						{"/path/to/server/dir/a", "/path/to/client/dir/a"},
 | 
						|
						{"/path/to/server/dir/b", "/path/to/client/dir/b"},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				rest: "/path/to/client/dir/c /path/to/server/dir/b",
 | 
						|
			},
 | 
						|
			wantRules: [][2]string{
 | 
						|
				{"/path/to/client/dir/a", "/path/to/server/dir/a"},
 | 
						|
				{"/path/to/client/dir/b", "/path/to/server/dir/b"},
 | 
						|
				{"/path/to/client/dir/c", "/path/to/server/dir/b"},
 | 
						|
			},
 | 
						|
			wantErr: false,
 | 
						|
		},
 | 
						|
		// Test modify rule.
 | 
						|
		{
 | 
						|
			name: "modify rule",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
 | 
						|
					substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}},
 | 
						|
				},
 | 
						|
				rest: "/path/to/client/dir /new/path/to/server/dir",
 | 
						|
			},
 | 
						|
			wantRules: [][2]string{{"/path/to/client/dir", "/new/path/to/server/dir"}},
 | 
						|
			wantErr:   false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "modify rule (multiple)",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					substitutePathClientToServer: [][2]string{
 | 
						|
						{"/path/to/client/dir/a", "/path/to/server/dir/a"},
 | 
						|
						{"/path/to/client/dir/b", "/path/to/server/dir/b"},
 | 
						|
						{"/path/to/client/dir/c", "/path/to/server/dir/b"},
 | 
						|
					},
 | 
						|
					substitutePathServerToClient: [][2]string{
 | 
						|
						{"/path/to/server/dir/a", "/path/to/client/dir/a"},
 | 
						|
						{"/path/to/server/dir/b", "/path/to/client/dir/b"},
 | 
						|
						{"/path/to/server/dir/b", "/path/to/client/dir/c"},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				rest: "/path/to/client/dir/b /new/path",
 | 
						|
			},
 | 
						|
			wantRules: [][2]string{
 | 
						|
				{"/path/to/client/dir/a", "/path/to/server/dir/a"},
 | 
						|
				{"/path/to/client/dir/b", "/new/path"},
 | 
						|
				{"/path/to/client/dir/c", "/path/to/server/dir/b"},
 | 
						|
			},
 | 
						|
			wantErr: false,
 | 
						|
		},
 | 
						|
		// Test delete rule.
 | 
						|
		{
 | 
						|
			name: "delete rule",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
 | 
						|
					substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}},
 | 
						|
				},
 | 
						|
				rest: "/path/to/client/dir",
 | 
						|
			},
 | 
						|
			wantRules: [][2]string{},
 | 
						|
			wantErr:   false,
 | 
						|
		},
 | 
						|
		// Test invalid input.
 | 
						|
		{
 | 
						|
			name: "error on empty args",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					substitutePathClientToServer: [][2]string{},
 | 
						|
					substitutePathServerToClient: [][2]string{},
 | 
						|
				},
 | 
						|
				rest: "  \n\r   ",
 | 
						|
			},
 | 
						|
			wantErr: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "error on delete nonexistent rule",
 | 
						|
			args: args{
 | 
						|
				args: &launchAttachArgs{
 | 
						|
					substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
 | 
						|
					substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}},
 | 
						|
				},
 | 
						|
				rest: "/path/to/server/dir",
 | 
						|
			},
 | 
						|
			wantRules: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
 | 
						|
			wantErr:   true,
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tt := range tests {
 | 
						|
		t.Run(tt.name, func(t *testing.T) {
 | 
						|
			err := configureSetSubstitutePath(tt.args.args, tt.args.rest)
 | 
						|
			if (err != nil) != tt.wantErr {
 | 
						|
				t.Errorf("configureSetSubstitutePath() error = %v, wantErr %v", err, tt.wantErr)
 | 
						|
				return
 | 
						|
			}
 | 
						|
			if len(tt.args.args.substitutePathClientToServer) != len(tt.wantRules) {
 | 
						|
				t.Errorf("configureSetSubstitutePath() got substitutePathClientToServer=%v, want %d rules", tt.args.args.substitutePathClientToServer, len(tt.wantRules))
 | 
						|
				return
 | 
						|
			}
 | 
						|
			gotClient2Server := tt.args.args.substitutePathClientToServer
 | 
						|
			gotServer2Client := tt.args.args.substitutePathServerToClient
 | 
						|
			for i, rule := range tt.wantRules {
 | 
						|
				if gotClient2Server[i][0] != rule[0] || gotClient2Server[i][1] != rule[1] {
 | 
						|
					t.Errorf("configureSetSubstitutePath() got substitutePathClientToServer[%d]=%#v,\n want %#v rules", i, gotClient2Server[i], rule)
 | 
						|
				}
 | 
						|
				if gotServer2Client[i][1] != rule[0] || gotServer2Client[i][0] != rule[1] {
 | 
						|
					reverseRule := [2]string{rule[1], rule[0]}
 | 
						|
					t.Errorf("configureSetSubstitutePath() got substitutePathServerToClient[%d]=%#v,\n want %#v rules", i, gotClient2Server[i], reverseRule)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |