#
# KUnit base configuration
#

menuconfig KUNIT
	tristate "KUnit - Enable support for unit tests"
	help
	  Enables support for kernel unit tests (KUnit), a lightweight unit
	  testing and mocking framework for the Linux kernel. These tests are
	  able to be run locally on a developer's workstation without a VM or
	  special hardware when using UML. Can also be used on most other
	  architectures. For more information, please see
	  Documentation/dev-tools/kunit/.

if KUNIT

config KUNIT_DEBUGFS
	bool "KUnit - Enable /sys/kernel/debug/kunit debugfs representation"
	help
	  Enable debugfs representation for kunit.  Currently this consists
	  of /sys/kernel/debug/kunit/<test_suite>/results files for each
	  test suite, which allow users to see results of the last test suite
	  run that occurred.

config KUNIT_TEST
	tristate "KUnit test for KUnit"
	help
	  Enables the unit tests for the KUnit test framework. These tests test
	  the KUnit test framework itself; the tests are both written using
	  KUnit and test KUnit. This option should only be enabled for testing
	  purposes by developers interested in testing that KUnit works as
	  expected.

config KUNIT_EXAMPLE_TEST
	tristate "Example test for KUnit"
	help
	  Enables an example unit test that illustrates some of the basic
	  features of KUnit. This test only exists to help new users understand
	  what KUnit is and how it is used. Please refer to the example test
	  itself, lib/kunit/example-test.c, for more information. This option
	  is intended for curious hackers who would like to understand how to
	  use KUnit for kernel development.

endif # KUNIT
