diff --git a/pkg/bridgelib/bridgelib.go b/pkg/bridgelib/bridgelib.go index 754937ca..351b6db8 100644 --- a/pkg/bridgelib/bridgelib.go +++ b/pkg/bridgelib/bridgelib.go @@ -106,3 +106,11 @@ func withLocationProvider(fn func(provider *locations.DefaultProvider) string) * return C.CString(fn(locs)) } + +// cStringToGoString converts a cString to a GoString and release the memory for the C-String. This function is implemented +// here because cgo code is not allowed in Go test files. +func cStringToGoString(cStr *C.char) string { + str := C.GoString(cStr) + DeleteCString(cStr) // preferred over a direct call to C.free so that the former is covered in tests. + return str +} diff --git a/pkg/bridgelib/bridgelib_test.go b/pkg/bridgelib/bridgelib_test.go new file mode 100644 index 00000000..c233a835 --- /dev/null +++ b/pkg/bridgelib/bridgelib_test.go @@ -0,0 +1,38 @@ +// Copyright (c) 2023 Proton AG +// +// This file is part of Proton Mail Bridge. +// +// Proton Mail Bridge is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Proton Mail Bridge is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Proton Mail Bridge. If not, see . + +package main + +import ( + "path/filepath" + "runtime" + "testing" + + "github.com/ProtonMail/proton-bridge/v3/internal/constants" + "github.com/ProtonMail/proton-bridge/v3/internal/locations" + "github.com/stretchr/testify/require" +) + +func TestBridgelib(t *testing.T) { + locs, err := locations.NewDefaultProvider(filepath.Join(constants.VendorName, constants.ConfigName)) + require.NoError(t, err) + + require.Equal(t, cStringToGoString(GoOS()), runtime.GOOS) + require.Equal(t, cStringToGoString(UserCacheDir()), locs.UserCache()) + require.Equal(t, cStringToGoString(UserConfigDir()), locs.UserConfig()) + require.Equal(t, cStringToGoString(UserDataDir()), locs.UserData()) +}