github.com/go-ole/go-ole@v1.2.6/safearrayconversion_test.go (about) 1 // +build windows 2 3 package ole 4 5 import ( 6 "fmt" 7 "strings" 8 "testing" 9 ) 10 11 // This tests more than one function. It tests all of the functions needed in order to retrieve an 12 // SafeArray populated with Strings. 13 func TestSafeArrayConversionString(t *testing.T) { 14 CoInitialize(0) 15 defer CoUninitialize() 16 17 clsid, err := CLSIDFromProgID("QBXMLRP2.RequestProcessor.1") 18 if err != nil { 19 if err.(*OleError).Code() == CO_E_CLASSSTRING { 20 return 21 } 22 t.Log(err) 23 t.FailNow() 24 } 25 26 unknown, err := CreateInstance(clsid, IID_IUnknown) 27 if err != nil { 28 t.Log(err) 29 t.FailNow() 30 } 31 defer unknown.Release() 32 33 dispatch, err := unknown.QueryInterface(IID_IDispatch) 34 if err != nil { 35 t.Log(err) 36 t.FailNow() 37 } 38 39 var dispid []int32 40 dispid, err = dispatch.GetIDsOfName([]string{"OpenConnection2"}) 41 if err != nil { 42 t.Log(err) 43 t.FailNow() 44 } 45 46 var result *VARIANT 47 _, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD, "", "Test Application 1", 1) 48 if err != nil { 49 t.Log(err) 50 t.FailNow() 51 } 52 53 dispid, err = dispatch.GetIDsOfName([]string{"BeginSession"}) 54 if err != nil { 55 t.Log(err) 56 t.FailNow() 57 } 58 59 result, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD, "", 2) 60 if err != nil { 61 t.Log(err) 62 t.FailNow() 63 } 64 65 ticket := result.ToString() 66 67 dispid, err = dispatch.GetIDsOfName([]string{"QBXMLVersionsForSession"}) 68 if err != nil { 69 t.Log(err) 70 t.FailNow() 71 } 72 73 result, err = dispatch.Invoke(dispid[0], DISPATCH_PROPERTYGET, ticket) 74 if err != nil { 75 t.Log(err) 76 t.FailNow() 77 } 78 79 // Where the real tests begin. 80 conversion := result.ToArray() 81 82 totalElements, _ := conversion.TotalElements(0) 83 if totalElements != 13 { 84 t.Log(fmt.Sprintf("%d total elements does not equal 13\n", totalElements)) 85 t.Fail() 86 } 87 88 versions := conversion.ToStringArray() 89 if len(versions) != 13 { 90 t.Log(fmt.Sprintf("%s\n", strings.Join(versions, ", "))) 91 t.Fail() 92 } 93 94 conversion.Release() 95 96 dispid, err = dispatch.GetIDsOfName([]string{"EndSession"}) 97 if err != nil { 98 t.Log(err) 99 t.FailNow() 100 } 101 102 _, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD, ticket) 103 if err != nil { 104 t.Log(err) 105 t.FailNow() 106 } 107 108 dispid, err = dispatch.GetIDsOfName([]string{"CloseConnection"}) 109 if err != nil { 110 t.Log(err) 111 t.FailNow() 112 } 113 114 _, err = dispatch.Invoke(dispid[0], DISPATCH_METHOD) 115 if err != nil { 116 t.Log(err) 117 t.FailNow() 118 } 119 }