/test/lib/foreign_interface/test_fi02.e

http://github.com/tybor/Liberty · Specman e · 49 lines · 35 code · 12 blank · 2 comment · 0 complexity · 9fa8421b1ef40636afe7e148be21da3a MD5 · raw file

  1. class TEST_FI02
  2. -- test DLL
  3. insert
  4. EIFFELTEST_TOOLS
  5. FOREIGN_DLL_HANDLER
  6. WRAPPER_HANDLER
  7. DL_FLAGS
  8. create {}
  9. make
  10. feature {}
  11. make
  12. local
  13. loader: FOREIGN_DLL_LOADER
  14. dll: FOREIGN_DLL
  15. a: FOREIGN_AGENT
  16. dlopen: FOREIGN_TYPED_OBJECT[POINTER]
  17. params: FOREIGN_PARAMETERS
  18. do
  19. dll := loader.library("libdl.so")
  20. label_assert("dll loaded", dll /= Void)
  21. label_assert("dll well named", dll.filename.is_equal("libdl.so"))
  22. label_assert("dll singleton", dll = loader.library("libdl.so"))
  23. a := dll.function("dlopen", << types.c_string, types.sint32 >>, types.pointer)
  24. label_assert("function exists", a /= Void)
  25. die_with_code(0)
  26. -- TODO: the following does not work, I don't know why:
  27. params.set(<<
  28. types.create_string("libdl.so"),
  29. types.create_sint32(rtld_noload)
  30. >>)
  31. dlopen ?= a.item(params)
  32. label_assert("ffi-loaded dll not void", dlopen /= Void)
  33. label_assert("ffi-loaded dll pointer not null", dlopen.item.is_not_null)
  34. label_assert("ffi-loaded dll pointer is the same as foreign pointer", dlopen.item = dll.dso.handle)
  35. end
  36. types: FOREIGN_TYPES
  37. end