43 lines
1.2 KiB
GDScript
43 lines
1.2 KiB
GDScript
# fuzzer to get available godot class names
|
|
class_name GodotClassNameFuzzer
|
|
extends Fuzzer
|
|
|
|
var class_names := []
|
|
const EXCLUDED_CLASSES = [
|
|
"JavaClass",
|
|
"_ClassDB",
|
|
"MainLoop",
|
|
"JNISingleton",
|
|
"SceneTree",
|
|
"WebRTC",
|
|
"WebRTCPeerConnection",
|
|
"Tween",
|
|
"TextServerAdvanced",
|
|
"InputEventShortcut",
|
|
# GD-110 - missing enum `Vector3.Axis`
|
|
"Sprite3D", "AnimatedSprite3D",
|
|
]
|
|
|
|
|
|
func _init(no_singleton :bool = false,only_instancialbe :bool = false):
|
|
#class_names = ClassDB.get_class_list()
|
|
for clazz_name in ClassDB.get_class_list():
|
|
#https://github.com/godotengine/godot/issues/67643
|
|
if clazz_name.contains("Extension"):
|
|
continue
|
|
if no_singleton and Engine.has_singleton(clazz_name):
|
|
continue
|
|
if only_instancialbe and not ClassDB.can_instantiate(clazz_name):
|
|
continue
|
|
# exclude special classes
|
|
if EXCLUDED_CLASSES.has(clazz_name):
|
|
continue
|
|
# exlude Godot 3.5 *Tweener classes where produces and error
|
|
# `ERROR: Can't create empty IntervalTweener. Use get_tree().tween_property() or tween_property() instead.`
|
|
if clazz_name.find("Tweener") != -1:
|
|
continue
|
|
class_names.push_back(clazz_name)
|
|
|
|
|
|
func next_value():
|
|
return class_names[randi() % class_names.size()]
|