package sign import ( "bytes" "os" "strings" "testing" "github.com/jimeh/undent" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) var entitlementsTestCases = []struct { name string entitlements Entitlements want string }{ { name: "none", entitlements: Entitlements{}, //nolint:lll want: undent.String(` `, ), }, { name: "one", entitlements: Entitlements{"com.apple.security.cs.allow-jit"}, //nolint:lll want: undent.String(` com.apple.security.cs.allow-jit `, ), }, { name: "many", entitlements: Entitlements{ "com.apple.security.cs.allow-jit", "com.apple.security.network.client", "com.apple.security.cs.disable-library-validation", "com.apple.security.cs.allow-dyld-environment-variables", "com.apple.security.automation.apple-events", }, //nolint:lll want: undent.String(` com.apple.security.cs.allow-jit com.apple.security.network.client com.apple.security.cs.disable-library-validation com.apple.security.cs.allow-dyld-environment-variables com.apple.security.automation.apple-events `, ), }, } func TestDefaultEmacsEntitlements(t *testing.T) { assert.Equal(t, []string{ "com.apple.security.cs.allow-jit", "com.apple.security.network.client", "com.apple.security.cs.disable-library-validation", "com.apple.security.cs.allow-dyld-environment-variables", "com.apple.security.automation.apple-events", }, DefaultEmacsEntitlements, ) } func TestEntitlements_Write(t *testing.T) { for _, tt := range entitlementsTestCases { t.Run(tt.name, func(t *testing.T) { var buf bytes.Buffer err := tt.entitlements.Write(&buf) require.NoError(t, err) assert.Equal(t, tt.want, strings.TrimSpace(buf.String())) }) } } func TestEntitlements_TempFile(t *testing.T) { for _, tt := range entitlementsTestCases { t.Run(tt.name, func(t *testing.T) { tmpFile, err := tt.entitlements.TempFile() require.NoError(t, err) defer os.Remove(tmpFile) content, err := os.ReadFile(tmpFile) require.NoError(t, err) assert.Equal(t, tt.want, strings.TrimSpace(string(content))) assert.True(t, strings.HasSuffix(tmpFile, ".entitlements.plist"), "temp file name does not match \"*.entitlements.plist\"", ) }) } }