This commit introduces simple tests for functions:
- uclass_find_device_by_name()
- uclass_get_device_by_name()

Tests added by this commit:
- Test: dm_test_uclass_devices_find_by_name: for uclass id: UCLASS_TEST_FDT
 * get uclass's devices by uclass_find_first/next_device() each as 'testdev',
 * for each returned device, call: uclass_find_device_by_name(),
   with previously returned device's name as an argument ('testdev->name').
 * for the found device ('founddev') check if:
   * founddev != NULL
   * testdev == founddev
   * testdev->name == founddev->name (by strcmp)

- Test: dm_test_uclass_devices_get_by_name: for uclass id: UCLASS_TEST_FDT
 * get uclass's devices by uclass_get_first/next_device() each as 'testdev',
 * for each returned device, call: uclass_get_device_by_name(),
   with previously returned device's name as an argument ('testdev->name').
 * for the found device ('founddev') check if:
   * founddev != NULL
   * founddev is active
   * testdev == founddev
   * testdev->name == founddev->name (by strcmp)

Signed-off-by: Przemyslaw Marczak <[email protected]>
Cc: Simon Glass <[email protected]>
---
Changes V4:
-new commit
---
 test/dm/core.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/test/dm/core.c b/test/dm/core.c
index 3a8dd1d..b678511 100644
--- a/test/dm/core.c
+++ b/test/dm/core.c
@@ -674,6 +674,43 @@ static int dm_test_uclass_devices_find(struct 
dm_test_state *dms)
 }
 DM_TEST(dm_test_uclass_devices_find, DM_TESTF_SCAN_PDATA);
 
+static int dm_test_uclass_devices_find_by_name(struct dm_test_state *dms)
+{
+       struct udevice *founddev;
+       struct udevice *testdev;
+       int foundret, ret;
+
+       /**
+        * For each test device found in fdt like: "a-test", "b-test", etc.,
+        * use its name and try to find it by uclass_find_device_by_name().
+        * Then, on success check if:
+        * - current 'testdev' name is equal to the returned 'founddev' name
+        * - current 'testdev' pointer is equal to the returned 'founddev'
+        *
+        * We assume that, each uclass's device name is unique, so if not, then
+        * this will fail on checking condition: testdev == founddev, since the
+        * uclass_find_device_by_name(), returns the first device by given name.
+       */
+       for (ret = uclass_find_first_device(UCLASS_TEST_FDT, &testdev);
+            testdev;
+            ret = uclass_find_next_device(&testdev)) {
+               ut_assert(!ret);
+               ut_assert(testdev);
+
+               foundret = uclass_find_device_by_name(UCLASS_TEST_FDT,
+                                                     testdev->name,
+                                                     &founddev);
+
+               ut_assert(!foundret);
+               ut_assert(testdev);
+               ut_asserteq_str(testdev->name, founddev->name);
+               ut_asserteq_ptr(testdev, founddev);
+       }
+
+       return 0;
+}
+DM_TEST(dm_test_uclass_devices_find_by_name, DM_TESTF_SCAN_FDT);
+
 static int dm_test_uclass_devices_get(struct dm_test_state *dms)
 {
        struct udevice *dev;
@@ -691,6 +728,50 @@ static int dm_test_uclass_devices_get(struct dm_test_state 
*dms)
 }
 DM_TEST(dm_test_uclass_devices_get, DM_TESTF_SCAN_PDATA);
 
+static int dm_test_uclass_devices_get_by_name(struct dm_test_state *dms)
+{
+       struct udevice *founddev;
+       struct udevice *testdev;
+       int ret, foundret;
+
+       /**
+        * For each test device found in fdt like: "a-test", "b-test", etc.,
+        * use its name and try to get it by uclass_get_device_by_name().
+        * On success check if:
+        * - returned founddev' is active
+        * - current 'testdev' name is equal to the returned 'founddev' name
+        * - current 'testdev' pointer is equal to the returned 'founddev'
+        *
+        * We asserts that the 'testdev' is active on each loop entry, so we
+        * could be sure that the 'founddev' is activated too, but for sure
+        * we check it again.
+        *
+        * We assume that, each uclass's device name is unique, so if not, then
+        * this will fail on checking condition: testdev == founddev, since the
+        * uclass_get_device_by_name(), returns the first device by given name.
+       */
+       for (ret = uclass_first_device(UCLASS_TEST_FDT, &testdev);
+            testdev;
+            ret = uclass_next_device(&testdev)) {
+               ut_assert(!ret);
+               ut_assert(testdev);
+               ut_assert(device_active(testdev));
+
+               foundret = uclass_get_device_by_name(UCLASS_TEST_FDT,
+                                                   testdev->name,
+                                                   &founddev);
+
+               ut_assert(!foundret);
+               ut_assert(founddev);
+               ut_assert(device_active(founddev));
+               ut_asserteq_str(testdev->name, founddev->name);
+               ut_asserteq_ptr(testdev, founddev);
+       }
+
+       return 0;
+}
+DM_TEST(dm_test_uclass_devices_get_by_name, DM_TESTF_SCAN_FDT);
+
 static int dm_test_device_get_uclass_id(struct dm_test_state *dms)
 {
        struct udevice *dev;
-- 
1.9.1

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to