From: Piotr Caban <piotr@codeweavers.com> --- dlls/odbc32/tests/driver.c | 7 +++++ dlls/odbc32/tests/driver.h | 2 ++ dlls/odbc32/tests/driver.spec | 1 + dlls/odbc32/tests/odbc32.c | 56 +++++++++++++++++++++++++++-------- 4 files changed, 54 insertions(+), 12 deletions(-) diff --git a/dlls/odbc32/tests/driver.c b/dlls/odbc32/tests/driver.c index 66e9be0274c..518740a0760 100644 --- a/dlls/odbc32/tests/driver.c +++ b/dlls/odbc32/tests/driver.c @@ -89,6 +89,13 @@ SQLRETURN WINAPI SQLDriverConnect( SQLHDBC con, SQLHWND win, SQLCHAR *in_con, out_con, out_con_max_len, out_con_len, completion ); } +SQLRETURN WINAPI SQLBrowseConnect( SQLHDBC con, SQLCHAR *in_con, SQLSMALLINT in_con_len, + SQLCHAR *out_con, SQLSMALLINT out_con_max_len, SQLSMALLINT *out_con_len ) +{ + return driver_funcs->SQLBrowseConnect( con, in_con, in_con_len, + out_con, out_con_max_len, out_con_len ); +} + SQLRETURN WINAPI SQLDisconnect( SQLHDBC con ) { return driver_funcs->SQLDisconnect( con ); diff --git a/dlls/odbc32/tests/driver.h b/dlls/odbc32/tests/driver.h index 8b517a89556..f10384fb1e3 100644 --- a/dlls/odbc32/tests/driver.h +++ b/dlls/odbc32/tests/driver.h @@ -30,5 +30,7 @@ struct driver_funcs SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); SQLRETURN (WINAPI *SQLDriverConnect)(SQLHDBC, SQLHWND, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLUSMALLINT); + SQLRETURN (WINAPI *SQLBrowseConnect)(SQLHDBC, SQLCHAR*, SQLSMALLINT, + SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); SQLRETURN (WINAPI *SQLDisconnect)(SQLHDBC); }; diff --git a/dlls/odbc32/tests/driver.spec b/dlls/odbc32/tests/driver.spec index 5da51221cf2..63aa6458153 100644 --- a/dlls/odbc32/tests/driver.spec +++ b/dlls/odbc32/tests/driver.spec @@ -1,6 +1,7 @@ @ stdcall init_funcs(ptr) @ stdcall SQLAllocHandle(long long ptr) +@ stdcall SQLBrowseConnect(long str long ptr long ptr) @ stdcall SQLConnect(long str long str long str long) @ stdcall SQLDisconnect(long) @ stdcall SQLDriverConnect(long long str long ptr long ptr long) diff --git a/dlls/odbc32/tests/odbc32.c b/dlls/odbc32/tests/odbc32.c index b201f7471ec..d7d6381437b 100644 --- a/dlls/odbc32/tests/odbc32.c +++ b/dlls/odbc32/tests/odbc32.c @@ -73,6 +73,7 @@ DEFINE_EXPECT( driver_SQLConnect ); DEFINE_EXPECT( driver_SQLGetConnectAttr ); DEFINE_EXPECT( driver_SQLDisconnect ); DEFINE_EXPECT( driver_SQLDriverConnect ); +DEFINE_EXPECT( driver_SQLBrowseConnect ); static SQLRETURN WINAPI driver_SQLAllocHandle( SQLSMALLINT type, SQLHANDLE input_handle, SQLHANDLE *out ) @@ -191,6 +192,23 @@ static SQLRETURN WINAPI driver_SQLDriverConnect( SQLHDBC con, SQLHWND win, return SQL_SUCCESS; } +static SQLRETURN WINAPI driver_SQLBrowseConnect( SQLHDBC con, SQLCHAR *in_con, + SQLSMALLINT in_con_len, SQLCHAR *out_con, SQLSMALLINT out_con_max_len, + SQLSMALLINT *out_con_len ) +{ + CHECK_EXPECT( driver_SQLBrowseConnect ); + ok( (ULONG_PTR)con == SQL_HANDLE_DBC, "con = %p\n", con ); + todo_wine ok( in_con_len == 17, "in_con_len = %d\n", in_con_len ); + todo_wine ok( !strcmp((char *)in_con, "DSN=winetest_dsn;"), "in_con = %s\n", in_con ); + ok( out_con != NULL, "out_con = %p\n", out_con ); + ok( out_con_max_len == 256, "out_con_max_len = %d\n", out_con_max_len ); + ok( out_con_len != NULL, "out_con_len = %p\n", out_con_len ); + + strcpy( (char *)out_con, (char *)in_con ); + *out_con_len = strlen( (char *)in_con ); + return SQL_SUCCESS; +} + static SQLRETURN WINAPI driver_SQLDisconnect( SQLHDBC con ) { CHECK_EXPECT( driver_SQLDisconnect ); @@ -208,6 +226,7 @@ struct driver_funcs driver_funcs = driver_SQLGetInfo, driver_SQLConnect, driver_SQLDriverConnect, + driver_SQLBrowseConnect, driver_SQLDisconnect, }; @@ -559,26 +578,39 @@ static void test_SQLBrowseConnect( void ) len = 0; str[0] = 0; - ret = SQLBrowseConnect( con, (SQLCHAR *)"DSN=winetest", 12, str, sizeof(str), &len ); - if (ret == SQL_ERROR) diag( con, SQL_HANDLE_DBC ); - if (ret != SQL_SUCCESS) - { - SQLFreeConnect( con ); - SQLFreeEnv( env ); - skip( "data source winetest not available\n" ); - return; - } + SET_EXPECT( driver_SQLAllocHandle_env ); + SET_EXPECT( driver_SQLSetEnvAttr ); + SET_EXPECT( driver_SQLAllocHandle_con ); + SET_EXPECT( driver_SQLGetInfo_SQL_DRIVER_ODBC_VER ); + SET_EXPECT( driver_SQLBrowseConnect ); + SET_EXPECT( driver_SQLGetInfo ); + ret = SQLBrowseConnect( con, (SQLCHAR *)"DSN=winetest_dsn", 16, str, sizeof(str), &len ); + CHECK_CALLED( driver_SQLAllocHandle_env ); + CHECK_CALLED( driver_SQLSetEnvAttr ); + CHECK_CALLED( driver_SQLAllocHandle_con ); + CHECK_CALLED( driver_SQLGetInfo_SQL_DRIVER_ODBC_VER ); + CHECK_CALLED( driver_SQLBrowseConnect ); + todo_wine CHECK_CALLED( driver_SQLGetInfo ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); - ok( !strcmp( (const char *)str, "DSN=winetest" ), "got '%s'\n", str ); - ok( len == 12, "got %d\n", len ); + if (ret == SQL_ERROR) diag( con, SQL_HANDLE_DBC ); + todo_wine ok( !strcmp( (const char *)str, "DSN=winetest_dsn;" ), "got '%s'\n", str ); + todo_wine ok( len == 17, "got %d\n", len ); + SET_EXPECT( driver_SQLDisconnect ); ret = SQLDisconnect( con ); + CHECK_CALLED( driver_SQLDisconnect ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); + SET_EXPECT( driver_SQLFreeHandle_con ); + SET_EXPECT( driver_SQLFreeHandle_env ); ret = SQLFreeConnect( con ); + CHECK_CALLED( driver_SQLFreeHandle_con ); + todo_wine CHECK_CALLED( driver_SQLFreeHandle_env ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); + SET_EXPECT( driver_SQLFreeHandle_env ); ret = SQLFreeEnv( env ); + todo_wine CHECK_NOT_CALLED( driver_SQLFreeHandle_env ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); } @@ -978,12 +1010,12 @@ START_TEST(odbc32) setup_odbc_driver( driver_path ); test_SQLConnect(); test_SQLDriverConnect(); + test_SQLBrowseConnect(); cleanup_odbc_driver( driver_path ); } test_SQLAllocHandle(); test_SQLGetDiagRec(); - test_SQLBrowseConnect(); test_SQLDataSources(); test_SQLDrivers(); test_SQLExecDirect(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10624