test_imports.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. # These tests import Panda3D modules just to make sure that there are no
  2. # missing imports. It is useful for a quick and dirty test to make sure
  3. # that there are no obvious build issues.
  4. import pytest
  5. import sys
  6. # This will print out imports on the command line.
  7. #import direct.showbase.VerboseImport
  8. def test_imports_panda3d():
  9. import importlib, os
  10. import panda3d
  11. # Look for panda3d.* modules in builtins - pfreeze might put them there.
  12. for mod in sys.builtin_module_names:
  13. if mod.startswith('panda3d.'):
  14. importlib.import_module(mod)
  15. if hasattr(panda3d, '__file__') and panda3d.__spec__.origin != 'frozen':
  16. dir = os.path.dirname(panda3d.__file__)
  17. # Iterate over the things in the panda3d package that look like modules.
  18. extensions = set(importlib.machinery.all_suffixes())
  19. for basename in os.listdir(dir):
  20. if basename.startswith('lib'):
  21. # This not a Python module.
  22. continue
  23. module = basename.split('.', 1)[0]
  24. ext = basename[len(module):]
  25. if module == 'dtoolconfig' or module == 'interrogatedb':
  26. continue
  27. if ext in extensions:
  28. importlib.import_module('panda3d.%s' % (module))
  29. def test_imports_panda3d_net():
  30. from panda3d import core
  31. if not hasattr(core, 'ConnectionWriter'):
  32. pytest.skip("Build without HAVE_NET")
  33. from panda3d import net
  34. assert core.ConnectionWriter == net.ConnectionWriter
  35. assert core.ConnectionWriter.__module__ == 'panda3d.net'
  36. def test_imports_direct():
  37. import direct.actor.Actor
  38. import direct.actor.DistributedActor
  39. import direct.controls.BattleWalker
  40. import direct.controls.ControlManager
  41. import direct.controls.DevWalker
  42. import direct.controls.GhostWalker
  43. import direct.controls.GravityWalker
  44. import direct.controls.InputState
  45. import direct.controls.NonPhysicsWalker
  46. import direct.controls.ObserverWalker
  47. import direct.controls.SwimWalker
  48. import direct.controls.TwoDWalker
  49. import direct.directnotify.DirectNotify
  50. import direct.directnotify.DirectNotifyGlobal
  51. import direct.directnotify.Logger
  52. import direct.directnotify.LoggerGlobal
  53. import direct.directnotify.Notifier
  54. import direct.directnotify.RotatingLog
  55. import direct.directtools.DirectCameraControl
  56. import direct.directtools.DirectGeometry
  57. import direct.directtools.DirectGlobals
  58. import direct.directtools.DirectGrid
  59. import direct.directtools.DirectLights
  60. import direct.directtools.DirectManipulation
  61. import direct.directtools.DirectSelection
  62. import direct.directtools.DirectUtil
  63. import direct.directutil.DeltaProfiler
  64. import direct.directutil.DistributedLargeBlobSender
  65. import direct.directutil.DistributedLargeBlobSenderAI
  66. import direct.directutil.LargeBlobSenderConsts
  67. import direct.directutil.Mopath
  68. import direct.directutil.Verify
  69. import direct.directutil.WeightedChoice
  70. import direct.dist.FreezeTool
  71. import direct.dist.icon
  72. import direct.dist.commands
  73. import direct.extensions_native.extension_native_helpers
  74. import direct.filter.CommonFilters
  75. import direct.filter.FilterManager
  76. import direct.fsm.ClassicFSM
  77. import direct.fsm.FSM
  78. import direct.fsm.FourState
  79. import direct.fsm.FourStateAI
  80. import direct.fsm.SampleFSM
  81. import direct.fsm.State
  82. import direct.fsm.StateData
  83. import direct.fsm.StatePush
  84. import direct.gui.DirectButton
  85. import direct.gui.DirectCheckBox
  86. import direct.gui.DirectCheckButton
  87. import direct.gui.DirectDialog
  88. import direct.gui.DirectEntry
  89. import direct.gui.DirectEntryScroll
  90. import direct.gui.DirectFrame
  91. import direct.gui.DirectGui
  92. import direct.gui.DirectGuiBase
  93. import direct.gui.DirectGuiGlobals
  94. import direct.gui.DirectLabel
  95. import direct.gui.DirectOptionMenu
  96. import direct.gui.DirectRadioButton
  97. import direct.gui.DirectScrollBar
  98. import direct.gui.DirectScrolledFrame
  99. import direct.gui.DirectScrolledList
  100. import direct.gui.DirectSlider
  101. import direct.gui.DirectWaitBar
  102. import direct.gui.OnscreenGeom
  103. import direct.gui.OnscreenImage
  104. import direct.gui.OnscreenText
  105. import direct.interval.ActorInterval
  106. import direct.interval.AnimControlInterval
  107. import direct.interval.FunctionInterval
  108. import direct.interval.IndirectInterval
  109. import direct.interval.Interval
  110. import direct.interval.IntervalGlobal
  111. import direct.interval.IntervalManager
  112. import direct.interval.LerpBlendHelpers
  113. import direct.interval.LerpInterval
  114. import direct.interval.MetaInterval
  115. import direct.interval.MopathInterval
  116. import direct.interval.ParticleInterval
  117. import direct.interval.ProjectileInterval
  118. import direct.interval.ProjectileIntervalTest
  119. import direct.interval.SoundInterval
  120. import direct.interval.TestInterval
  121. import direct.motiontrail.MotionTrail
  122. import direct.showbase.Audio3DManager
  123. import direct.showbase.BufferViewer
  124. import direct.showbase.BulletinBoard
  125. import direct.showbase.BulletinBoardGlobal
  126. import direct.showbase.BulletinBoardWatcher
  127. import direct.showbase.ContainerLeakDetector
  128. import direct.showbase.ContainerReport
  129. import direct.showbase.CountedResource
  130. import direct.showbase.DirectObject
  131. import direct.showbase.DistancePhasedNode
  132. import direct.showbase.EventGroup
  133. import direct.showbase.EventManager
  134. import direct.showbase.EventManagerGlobal
  135. import direct.showbase.ExceptionVarDump
  136. import direct.showbase.Factory
  137. import direct.showbase.Finder
  138. import direct.showbase.GarbageReport
  139. import direct.showbase.GarbageReportScheduler
  140. import direct.showbase.InputStateGlobal
  141. import direct.showbase.Job
  142. import direct.showbase.JobManager
  143. import direct.showbase.JobManagerGlobal
  144. import direct.showbase.LeakDetectors
  145. import direct.showbase.Loader
  146. import direct.showbase.Messenger
  147. import direct.showbase.MessengerGlobal
  148. import direct.showbase.MessengerLeakDetector
  149. import direct.showbase.MirrorDemo
  150. import direct.showbase.ObjectPool
  151. import direct.showbase.ObjectReport
  152. import direct.showbase.OnScreenDebug
  153. import direct.showbase.PhasedObject
  154. import direct.showbase.Pool
  155. import direct.showbase.ProfileSession
  156. import direct.showbase.PythonUtil
  157. import direct.showbase.RandomNumGen
  158. import direct.showbase.ReferrerSearch
  159. import direct.showbase.SfxPlayer
  160. import direct.showbase.ShadowDemo
  161. import direct.showbase.ShadowPlacer
  162. import direct.showbase.ShowBase
  163. import direct.showbase.TaskThreaded
  164. import direct.showbase.ThreeUpShow
  165. import direct.showbase.Transitions
  166. if sys.version_info < (3, 12):
  167. import direct.showbase.VFSImporter
  168. import direct.showbase.WxGlobal
  169. import direct.showutil.BuildGeometry
  170. import direct.showutil.Effects
  171. import direct.showutil.Rope
  172. import direct.showutil.TexMemWatcher
  173. import direct.showutil.TexViewer
  174. import direct.stdpy.file
  175. import direct.stdpy.glob
  176. import direct.stdpy.pickle
  177. import direct.stdpy.thread
  178. import direct.stdpy.threading
  179. import direct.stdpy.threading2
  180. import direct.task.FrameProfiler
  181. import direct.task.MiniTask
  182. import direct.task.Task
  183. import direct.task.TaskManagerGlobal
  184. import direct.task.TaskProfiler
  185. import direct.task.Timer
  186. def test_imports_direct_physics():
  187. pytest.importorskip("panda3d.physics")
  188. import direct.controls.PhysicsWalker
  189. import direct.particles.ForceGroup
  190. import direct.particles.GlobalForceGroup
  191. import direct.particles.ParticleEffect
  192. import direct.particles.ParticleManagerGlobal
  193. import direct.particles.Particles
  194. import direct.particles.SpriteParticleRendererExt
  195. import direct.showbase.PhysicsManagerGlobal
  196. def test_imports_direct_net():
  197. from panda3d import core
  198. if not hasattr(core, 'ConnectionWriter'):
  199. pytest.skip("Build without HAVE_NET")
  200. import direct.cluster.ClusterClient
  201. import direct.cluster.ClusterConfig
  202. import direct.cluster.ClusterMsgs
  203. import direct.cluster.ClusterServer
  204. import direct.distributed.AsyncRequest
  205. import direct.distributed.CRCache
  206. import direct.distributed.CRDataCache
  207. import direct.distributed.CachedDOData
  208. import direct.distributed.CartesianGridBase
  209. import direct.distributed.ClientRepository
  210. import direct.distributed.ClientRepositoryBase
  211. import direct.distributed.ClockDelta
  212. import direct.distributed.ConnectionRepository
  213. import direct.distributed.DistributedCamera
  214. import direct.distributed.DistributedCameraAI
  215. import direct.distributed.DistributedCameraOV
  216. import direct.distributed.DistributedCartesianGrid
  217. import direct.distributed.DistributedCartesianGridAI
  218. import direct.distributed.DistributedNode
  219. import direct.distributed.DistributedNodeAI
  220. import direct.distributed.DistributedNodeUD
  221. import direct.distributed.DistributedObject
  222. import direct.distributed.DistributedObjectAI
  223. import direct.distributed.DistributedObjectBase
  224. import direct.distributed.DistributedObjectGlobal
  225. import direct.distributed.DistributedObjectGlobalAI
  226. import direct.distributed.DistributedObjectGlobalUD
  227. import direct.distributed.DistributedObjectOV
  228. import direct.distributed.DistributedObjectUD
  229. import direct.distributed.DistributedSmoothNodeAI
  230. import direct.distributed.DistributedSmoothNodeBase
  231. import direct.distributed.DoCollectionManager
  232. import direct.distributed.DoHierarchy
  233. import direct.distributed.DoInterestManager
  234. import direct.distributed.GridChild
  235. import direct.distributed.GridParent
  236. import direct.distributed.InterestWatcher
  237. import direct.distributed.MsgTypes
  238. import direct.distributed.MsgTypesCMU
  239. import direct.distributed.NetMessenger
  240. import direct.distributed.ParentMgr
  241. import direct.distributed.PyDatagram
  242. import direct.distributed.PyDatagramIterator
  243. import direct.distributed.RelatedObjectMgr
  244. import direct.distributed.SampleObject
  245. import direct.distributed.ServerRepository
  246. import direct.distributed.StagedObject
  247. import direct.distributed.TimeManager
  248. import direct.distributed.TimeManagerAI
  249. def test_imports_tk():
  250. pytest.importorskip('tkinter')
  251. Pmw = pytest.importorskip('Pmw')
  252. import direct.showbase.TkGlobal
  253. import direct.tkpanels.AnimPanel
  254. import direct.tkpanels.DirectSessionPanel
  255. import direct.tkpanels.FSMInspector
  256. import direct.tkpanels.Inspector
  257. import direct.tkpanels.MopathRecorder
  258. import direct.tkpanels.NotifyPanel
  259. import direct.tkpanels.ParticlePanel
  260. import direct.tkpanels.Placer
  261. import direct.tkpanels.TaskManagerPanel
  262. import direct.tkwidgets.AppShell
  263. import direct.tkwidgets.Dial
  264. import direct.tkwidgets.EntryScale
  265. import direct.tkwidgets.Floater
  266. import direct.tkwidgets.MemoryExplorer
  267. import direct.tkwidgets.ProgressBar
  268. import direct.tkwidgets.SceneGraphExplorer
  269. import direct.tkwidgets.Slider
  270. import direct.tkwidgets.Tree
  271. import direct.tkwidgets.Valuator
  272. import direct.tkwidgets.VectorWidgets
  273. import direct.tkwidgets.WidgetPropertiesDialog
  274. def test_imports_wx():
  275. wx = pytest.importorskip('wx')
  276. import direct.wxwidgets.ViewPort
  277. import direct.wxwidgets.WxAppShell
  278. import direct.wxwidgets.WxPandaShell
  279. import direct.wxwidgets.WxPandaWindow
  280. import direct.wxwidgets.WxSlider
  281. import direct.leveleditor.ActionMgr
  282. import direct.leveleditor.AnimControlUI
  283. import direct.leveleditor.AnimGlobals
  284. import direct.leveleditor.AnimMgr
  285. import direct.leveleditor.AnimMgrBase
  286. import direct.leveleditor.CurveAnimUI
  287. import direct.leveleditor.CurveEditor
  288. import direct.leveleditor.FileMgr
  289. import direct.leveleditor.GraphEditorUI
  290. import direct.leveleditor.HotKeyUI
  291. import direct.leveleditor.LayerEditorUI
  292. import direct.leveleditor.LevelEditor
  293. import direct.leveleditor.LevelEditorBase
  294. import direct.leveleditor.LevelEditorStart
  295. import direct.leveleditor.LevelEditorUI
  296. import direct.leveleditor.LevelEditorUIBase
  297. import direct.leveleditor.LevelLoader
  298. import direct.leveleditor.LevelLoaderBase
  299. import direct.leveleditor.MayaConverter
  300. import direct.leveleditor.ObjectGlobals
  301. import direct.leveleditor.ObjectHandler
  302. import direct.leveleditor.ObjectMgr
  303. import direct.leveleditor.ObjectMgrBase
  304. import direct.leveleditor.ObjectPalette
  305. import direct.leveleditor.ObjectPaletteBase
  306. import direct.leveleditor.ObjectPaletteUI
  307. import direct.leveleditor.ObjectPropertyUI
  308. import direct.leveleditor.PaletteTreeCtrl
  309. import direct.leveleditor.ProtoObjs
  310. import direct.leveleditor.ProtoObjsUI
  311. import direct.leveleditor.ProtoPalette
  312. import direct.leveleditor.ProtoPaletteBase
  313. import direct.leveleditor.ProtoPaletteUI
  314. import direct.leveleditor.SceneGraphUI
  315. import direct.leveleditor.SceneGraphUIBase