github.com/grafana/pyroscope@v1.18.0/pkg/frontend/vcs/source/find_java_test.go (about)

     1  package source
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func Test_convertJavaFunctionNameToPath(t *testing.T) {
    10  	tests := []struct {
    11  		name         string
    12  		functionName string
    13  		expected     string
    14  	}{
    15  		{
    16  			name:         "simple class name",
    17  			functionName: "com/example/MyClass",
    18  			expected:     "com/example/MyClass.java",
    19  		},
    20  		{
    21  			name:         "class with method",
    22  			functionName: "com/example/MyClass.myMethod",
    23  			expected:     "com/example/MyClass.java",
    24  		},
    25  		{
    26  			name:         "inner class with dollar sign",
    27  			functionName: "com/example/OuterClass$InnerClass",
    28  			expected:     "com/example/OuterClass.java",
    29  		},
    30  		{
    31  			name:         "inner class with method",
    32  			functionName: "com/example/OuterClass$InnerClass.method",
    33  			expected:     "com/example/OuterClass.java",
    34  		},
    35  		{
    36  			name:         "lambda or anonymous class",
    37  			functionName: "com/example/MyClass$1",
    38  			expected:     "com/example/MyClass.java",
    39  		},
    40  		{
    41  			name:         "nested inner class",
    42  			functionName: "com/example/Outer$Inner$DeepInner",
    43  			expected:     "com/example/Outer.java",
    44  		},
    45  		{
    46  			name:         "method with parameters in name",
    47  			functionName: "com/example/MyClass.method.withDots",
    48  			expected:     "com/example/MyClass.java",
    49  		},
    50  		{
    51  			name:         "single segment with method",
    52  			functionName: "MyClass.method",
    53  			expected:     "MyClass.java",
    54  		},
    55  		{
    56  			name:         "single segment with inner class",
    57  			functionName: "MyClass$Inner",
    58  			expected:     "MyClass.java",
    59  		},
    60  		{
    61  			name:         "no package, just class",
    62  			functionName: "MyClass",
    63  			expected:     "MyClass.java",
    64  		},
    65  		{
    66  			name:         "complex nested structure",
    67  			functionName: "org/springframework/boot/Application$Config$Bean.initialize",
    68  			expected:     "org/springframework/boot/Application.java",
    69  		},
    70  		{
    71  			name:         "dollar sign before dot",
    72  			functionName: "com/example/Class$Inner.method",
    73  			expected:     "com/example/Class.java",
    74  		},
    75  		{
    76  			name:         "dot before dollar sign",
    77  			functionName: "com/example/Class.method$1",
    78  			expected:     "com/example/Class.java",
    79  		},
    80  		{
    81  			name:         "multiple dollar signs",
    82  			functionName: "com/example/Outer$Middle$Inner",
    83  			expected:     "com/example/Outer.java",
    84  		},
    85  		{
    86  			name:         "multiple dots",
    87  			functionName: "com/example/Class.method.subMethod",
    88  			expected:     "com/example/Class.java",
    89  		},
    90  	}
    91  
    92  	for _, tt := range tests {
    93  		t.Run(tt.name, func(t *testing.T) {
    94  			result := convertJavaFunctionNameToPath(tt.functionName)
    95  			assert.Equal(t, tt.expected, result)
    96  		})
    97  	}
    98  }