integ-tests/go-test-implementation-plan.mdx
This document provides a comprehensive task list for implementing Go tests equivalent to the existing Python test suite. The Python tests in /integ-tests/python/tests/ serve as the reference implementation, covering all aspects of the BAML framework.
The Python test suite contains approximately 1,584 lines of test code across 16 test files, covering:
test_functions_basic_test.go)Reference: test_functions.py:58-183
// Test cases to implement:
func TestSyncFunctionCall(t *testing.T)
func TestSingleBoolInput(t *testing.T)
func TestSingleStringListInput(t *testing.T)
func TestMultipleArgsFunction(t *testing.T)
func TestSingleClassInput(t *testing.T)
func TestSingleEnumInput(t *testing.T)
Key aspects:
test_functions_data_types_test.go)Reference: test_functions.py:70-249
// Test cases to implement:
func TestAllPrimitiveTypes(t *testing.T)
func TestEnumTypes(t *testing.T)
func TestClassTypes(t *testing.T)
func TestMapTypes(t *testing.T)
func TestUnionTypes(t *testing.T)
func TestOptionalFields(t *testing.T)
func TestLiteralTypes(t *testing.T)
Key aspects:
bool, int64, float64, stringtest_functions_streaming_test.go)Reference: test_functions.py:642-777
// Test cases to implement:
func TestBasicStreaming(t *testing.T)
func TestStreamingWithProviders(t *testing.T)
func TestConcurrentStreaming(t *testing.T)
func TestStreamingErrorHandling(t *testing.T)
func TestPartialResponseStreaming(t *testing.T)
Key aspects:
test_functions_media_test.go)Reference: test_functions.py:421-497 and test_media_inputs.py
// Test cases to implement:
func TestImageInputURL(t *testing.T)
func TestImageInputBase64(t *testing.T)
func TestAudioInputs(t *testing.T)
func TestVideoInputs(t *testing.T)
func TestPDFInputs(t *testing.T)
func TestMediaRoundTrip(t *testing.T)
Key aspects:
test_functions_constraints_test.go)Reference: test_functions.py:98-127
// Test cases to implement:
func TestFieldConstraints(t *testing.T)
func TestBlockConstraints(t *testing.T)
func TestConstraintValidation(t *testing.T)
func TestMalformedConstraints(t *testing.T)
Key aspects:
test_collector_comprehensive_test.go)Reference: test_collector.py (1,020 lines)
// Test cases to implement:
func TestCollectorBasicUsage(t *testing.T)
func TestCollectorMultipleCalls(t *testing.T)
func TestCollectorConcurrentCalls(t *testing.T)
func TestCollectorStreamingCalls(t *testing.T)
func TestCollectorErrorHandling(t *testing.T)
func TestCollectorMemoryManagement(t *testing.T)
Key aspects:
test_client_registry_test.go)Reference: test_functions.py:982-1034
// Test cases to implement:
func TestDynamicClientCreation(t *testing.T)
func TestClientRegistryProviders(t *testing.T)
func TestPrimaryClientSelection(t *testing.T)
func TestClientValidation(t *testing.T)
Key aspects:
test_providers_test.go)Reference: test_functions.py:446-640
// Test cases to implement:
func TestOpenAIProvider(t *testing.T)
func TestAnthropicProvider(t *testing.T)
func TestGoogleProvider(t *testing.T)
func TestAWSBedrockProvider(t *testing.T)
func TestVertexAIProvider(t *testing.T)
func TestProviderFallbacks(t *testing.T)
Key aspects:
test_retries_fallbacks_test.go)Reference: test_functions.py:500-518
// Test cases to implement:
func TestRetryExponential(t *testing.T)
func TestFallbackChains(t *testing.T)
func TestFailureHandling(t *testing.T)
func TestTimeoutBehavior(t *testing.T)
Key aspects:
test_error_handling_test.go)Reference: test_functions.py:1184-1230
// Test cases to implement:
func TestHTTPErrors(t *testing.T)
func TestValidationErrors(t *testing.T)
func TestSerializationErrors(t *testing.T)
func TestNetworkErrors(t *testing.T)
func TestArgumentErrors(t *testing.T)
Key aspects:
test_functions_recursive_test.go)Reference: test_functions.py:1351-1413
func TestLinkedListConstruction(t *testing.T)
func TestTreeStructures(t *testing.T)
func TestMutuallyRecursiveTypes(t *testing.T)
test_functions_aliases_test.go)Reference: test_functions.py:232-331
func TestSimpleAliases(t *testing.T)
func TestRecursiveAliases(t *testing.T)
func TestUnionTypes(t *testing.T)
test_parser_test.go)Reference: test_parser.py
func TestLLMResponseParsing(t *testing.T)
func TestStreamResponseParsing(t *testing.T)
func TestPartialResponseHandling(t *testing.T)
test_type_builder_test.go)Reference: test_typebuilder.py (546 lines)
func TestDynamicClassCreation(t *testing.T)
func TestDynamicEnumCreation(t *testing.T)
func TestPropertyAddition(t *testing.T)
func TestBAMLCodeInjection(t *testing.T)
test_modular_api_test.go)Reference: test_modular_api.py (335 lines)
func TestRequestResponsePattern(t *testing.T)
func TestManualHTTPClient(t *testing.T)
func TestBatchOperations(t *testing.T)
test_tracing_test.go)Reference: test_functions.py:830-896
func TestSpanCreation(t *testing.T)
func TestNestedTraces(t *testing.T)
func TestConcurrentTracing(t *testing.T)
test_options_patterns_test.go)Reference: test_with_options.py
func TestWithCollectorOption(t *testing.T)
func TestWithClientRegistryOption(t *testing.T)
func TestEnvironmentOverrides(t *testing.T)
test_memory_performance_test.go)Reference: memory_test.py
func TestMemoryUsage(t *testing.T)
func TestGarbageCollection(t *testing.T)
func TestLargeResponseHandling(t *testing.T)
test_caching_test.go)Reference: test_functions.py:1146-1181
func TestResponseCaching(t *testing.T)
func TestCacheValidation(t *testing.T)
func TestPerformanceImprovement(t *testing.T)
Each test file should follow this pattern:
package main
import (
"context"
"testing"
b "example.com/integ-tests/baml_client"
"example.com/integ-tests/baml_client/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestExample(t *testing.T) {
ctx := context.Background()
result, err := b.SomeFunction(ctx, "input")
require.NoError(t, err)
assert.Equal(t, "expected", result)
}
context.Context instead of async/awaittesting package for basic structuretestify for assertions (assert, require)context for timeouts and cancellationgomock for mocking if neededinteg-tests/go/
āāā test_functions_basic_test.go
āāā test_functions_data_types_test.go
āāā test_functions_streaming_test.go
āāā test_functions_media_test.go
āāā test_functions_constraints_test.go
āāā test_collector_comprehensive_test.go
āāā test_client_registry_test.go
āāā test_providers_test.go
āāā test_retries_fallbacks_test.go
āāā test_error_handling_test.go
āāā test_functions_recursive_test.go
āāā test_functions_aliases_test.go
āāā test_parser_test.go
āāā test_type_builder_test.go
āāā test_modular_api_test.go
āāā test_tracing_test.go
āāā test_options_patterns_test.go
āāā test_memory_performance_test.go
āāā test_caching_test.go
This plan ensures comprehensive test coverage matching the Python implementation while leveraging Go's strengths and conventions.