#include <ri.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(void) {
printf("=== RiAppBuilder C Binding Tests ===\n\n");
int passed = 0;
int failed = 0;
printf("Test 1: Builder creation...\n");
RiAppBuilder* builder = ri_app_builder_new();
if (builder != NULL) {
printf("[PASS] testBuilderCreation: Builder created successfully\n\n");
ri_app_builder_free(builder);
passed++;
} else {
printf("[FAIL] testBuilderCreation: Failed to create builder\n\n");
failed++;
}
printf("Test 2: Chain returns new pointer...\n");
RiAppBuilder* builder1 = ri_app_builder_new();
if (builder1 != NULL) {
RiAppBuilder* builder2 = ri_app_builder_with_config(builder1, "config.yaml");
if (builder2 != NULL && builder1 != builder2) {
printf("[PASS] testChainReturnsNewPointer: with_config returns new pointer\n\n");
passed++;
} else {
printf("[FAIL] testChainReturnsNewPointer: with_config should return new pointer\n\n");
failed++;
}
ri_app_builder_free(builder1);
if (builder2 != NULL) {
ri_app_builder_free(builder2);
}
} else {
printf("[FAIL] Failed to create builder for chaining test\n\n");
failed++;
}
printf("Test 3: Multiple chained calls...\n");
RiAppBuilder* b1 = ri_app_builder_new();
if (b1 != NULL) {
RiAppBuilder* b2 = ri_app_builder_with_config(b1, "config1.yaml");
RiAppBuilder* b3 = (b2 != NULL) ? ri_app_builder_with_config(b2, "config2.yaml") : NULL;
if (b1 != b2 && b2 != b3 && b1 != b3) {
printf("[PASS] testMultipleChainedCalls: Each call returns new pointer\n\n");
passed++;
} else {
printf("[FAIL] testMultipleChainedCalls: Each call should return new pointer\n\n");
failed++;
}
ri_app_builder_free(b1);
if (b2 != NULL) ri_app_builder_free(b2);
if (b3 != NULL) ri_app_builder_free(b3);
} else {
printf("[FAIL] Failed to create builder for multiple chaining test\n\n");
failed++;
}
printf("Test 4: Build creates runtime...\n");
RiAppBuilder* b = ri_app_builder_new();
if (b != NULL) {
RiAppRuntime* runtime = ri_app_builder_build(b);
if (runtime != NULL) {
printf("[PASS] testBuildCreatesRuntime: build() returns RiAppRuntime\n\n");
passed++;
ri_app_runtime_free(runtime);
} else {
printf("[INFO] testBuildCreatesRuntime: Build failed (expected without config)\n\n");
passed++;
}
ri_app_builder_free(b);
} else {
printf("[FAIL] Failed to create builder for build test\n\n");
failed++;
}
printf("Test 5: Resource cleanup...\n");
RiAppBuilder* b_clean = ri_app_builder_new();
if (b_clean != NULL) {
ri_app_builder_free(b_clean);
printf("[PASS] testResourceCleanup: Builder freed successfully\n\n");
passed++;
} else {
printf("[FAIL] Failed to create builder for cleanup test\n\n");
failed++;
}
printf("=== Test Summary ===\n");
printf("Passed: %d\n", passed);
printf("Failed: %d\n", failed);
printf("Total: %d\n", passed + failed);
return (failed > 0) ? 1 : 0;
}