github.com/undoio/delve@v1.9.0/service/dap/config_test.go (about)

     1  package dap
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestListConfig(t *testing.T) {
     8  	type args struct {
     9  		args *launchAttachArgs
    10  	}
    11  	tests := []struct {
    12  		name string
    13  		args args
    14  		want string
    15  	}{
    16  		{
    17  			name: "empty",
    18  			args: args{
    19  				args: &launchAttachArgs{},
    20  			},
    21  			want: formatConfig(0, false, false, "", false, [][2]string{}),
    22  		},
    23  		{
    24  			name: "default values",
    25  			args: args{
    26  				args: &defaultArgs,
    27  			},
    28  			want: formatConfig(50, false, false, "", false, [][2]string{}),
    29  		},
    30  		{
    31  			name: "custom values",
    32  			args: args{
    33  				args: &launchAttachArgs{
    34  					StackTraceDepth:              35,
    35  					ShowGlobalVariables:          true,
    36  					substitutePathClientToServer: [][2]string{{"hello", "world"}},
    37  					substitutePathServerToClient: [][2]string{{"world", "hello"}},
    38  				},
    39  			},
    40  			want: formatConfig(35, true, false, "", false, [][2]string{{"hello", "world"}}),
    41  		},
    42  	}
    43  	for _, tt := range tests {
    44  		t.Run(tt.name, func(t *testing.T) {
    45  			if got := listConfig(tt.args.args); got != tt.want {
    46  				t.Errorf("listConfig() = %v, want %v", got, tt.want)
    47  			}
    48  		})
    49  	}
    50  }
    51  
    52  func TestConfigureSetSubstitutePath(t *testing.T) {
    53  	type args struct {
    54  		args *launchAttachArgs
    55  		rest string
    56  	}
    57  	tests := []struct {
    58  		name      string
    59  		args      args
    60  		wantRules [][2]string
    61  		wantErr   bool
    62  	}{
    63  		// Test add rule.
    64  		{
    65  			name: "add rule",
    66  			args: args{
    67  				args: &launchAttachArgs{
    68  					substitutePathClientToServer: [][2]string{},
    69  					substitutePathServerToClient: [][2]string{},
    70  				},
    71  				rest: "/path/to/client/dir /path/to/server/dir",
    72  			},
    73  			wantRules: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
    74  			wantErr:   false,
    75  		},
    76  		{
    77  			name: "add rule (multiple)",
    78  			args: args{
    79  				args: &launchAttachArgs{
    80  					substitutePathClientToServer: [][2]string{
    81  						{"/path/to/client/dir/a", "/path/to/server/dir/a"},
    82  						{"/path/to/client/dir/b", "/path/to/server/dir/b"},
    83  					},
    84  					substitutePathServerToClient: [][2]string{
    85  						{"/path/to/server/dir/a", "/path/to/client/dir/a"},
    86  						{"/path/to/server/dir/b", "/path/to/client/dir/b"},
    87  					},
    88  				},
    89  				rest: "/path/to/client/dir/c /path/to/server/dir/b",
    90  			},
    91  			wantRules: [][2]string{
    92  				{"/path/to/client/dir/a", "/path/to/server/dir/a"},
    93  				{"/path/to/client/dir/b", "/path/to/server/dir/b"},
    94  				{"/path/to/client/dir/c", "/path/to/server/dir/b"},
    95  			},
    96  			wantErr: false,
    97  		},
    98  		// Test modify rule.
    99  		{
   100  			name: "modify rule",
   101  			args: args{
   102  				args: &launchAttachArgs{
   103  					substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
   104  					substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}},
   105  				},
   106  				rest: "/path/to/client/dir /new/path/to/server/dir",
   107  			},
   108  			wantRules: [][2]string{{"/path/to/client/dir", "/new/path/to/server/dir"}},
   109  			wantErr:   false,
   110  		},
   111  		{
   112  			name: "modify rule (multiple)",
   113  			args: args{
   114  				args: &launchAttachArgs{
   115  					substitutePathClientToServer: [][2]string{
   116  						{"/path/to/client/dir/a", "/path/to/server/dir/a"},
   117  						{"/path/to/client/dir/b", "/path/to/server/dir/b"},
   118  						{"/path/to/client/dir/c", "/path/to/server/dir/b"},
   119  					},
   120  					substitutePathServerToClient: [][2]string{
   121  						{"/path/to/server/dir/a", "/path/to/client/dir/a"},
   122  						{"/path/to/server/dir/b", "/path/to/client/dir/b"},
   123  						{"/path/to/server/dir/b", "/path/to/client/dir/c"},
   124  					},
   125  				},
   126  				rest: "/path/to/client/dir/b /new/path",
   127  			},
   128  			wantRules: [][2]string{
   129  				{"/path/to/client/dir/a", "/path/to/server/dir/a"},
   130  				{"/path/to/client/dir/b", "/new/path"},
   131  				{"/path/to/client/dir/c", "/path/to/server/dir/b"},
   132  			},
   133  			wantErr: false,
   134  		},
   135  		// Test delete rule.
   136  		{
   137  			name: "delete rule",
   138  			args: args{
   139  				args: &launchAttachArgs{
   140  					substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
   141  					substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}},
   142  				},
   143  				rest: "/path/to/client/dir",
   144  			},
   145  			wantRules: [][2]string{},
   146  			wantErr:   false,
   147  		},
   148  		// Test invalid input.
   149  		{
   150  			name: "error on empty args",
   151  			args: args{
   152  				args: &launchAttachArgs{
   153  					substitutePathClientToServer: [][2]string{},
   154  					substitutePathServerToClient: [][2]string{},
   155  				},
   156  				rest: "  \n\r   ",
   157  			},
   158  			wantErr: true,
   159  		},
   160  		{
   161  			name: "error on delete nonexistent rule",
   162  			args: args{
   163  				args: &launchAttachArgs{
   164  					substitutePathClientToServer: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
   165  					substitutePathServerToClient: [][2]string{{"/path/to/server/dir", "/path/to/client/dir"}},
   166  				},
   167  				rest: "/path/to/server/dir",
   168  			},
   169  			wantRules: [][2]string{{"/path/to/client/dir", "/path/to/server/dir"}},
   170  			wantErr:   true,
   171  		},
   172  	}
   173  	for _, tt := range tests {
   174  		t.Run(tt.name, func(t *testing.T) {
   175  			err := configureSetSubstitutePath(tt.args.args, tt.args.rest)
   176  			if (err != nil) != tt.wantErr {
   177  				t.Errorf("configureSetSubstitutePath() error = %v, wantErr %v", err, tt.wantErr)
   178  				return
   179  			}
   180  			if len(tt.args.args.substitutePathClientToServer) != len(tt.wantRules) {
   181  				t.Errorf("configureSetSubstitutePath() got substitutePathClientToServer=%v, want %d rules", tt.args.args.substitutePathClientToServer, len(tt.wantRules))
   182  				return
   183  			}
   184  			gotClient2Server := tt.args.args.substitutePathClientToServer
   185  			gotServer2Client := tt.args.args.substitutePathServerToClient
   186  			for i, rule := range tt.wantRules {
   187  				if gotClient2Server[i][0] != rule[0] || gotClient2Server[i][1] != rule[1] {
   188  					t.Errorf("configureSetSubstitutePath() got substitutePathClientToServer[%d]=%#v,\n want %#v rules", i, gotClient2Server[i], rule)
   189  				}
   190  				if gotServer2Client[i][1] != rule[0] || gotServer2Client[i][0] != rule[1] {
   191  					reverseRule := [2]string{rule[1], rule[0]}
   192  					t.Errorf("configureSetSubstitutePath() got substitutePathServerToClient[%d]=%#v,\n want %#v rules", i, gotClient2Server[i], reverseRule)
   193  				}
   194  			}
   195  		})
   196  	}
   197  }