[libcamera-devel] [RFC PATCH v2 7/9] libcamera: test: Add ControlList tests

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Jun 21 18:13:59 CEST 2019


Extend the Controls tests with specific testing of the ControlList
infrastructure and public APIs.

Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
 test/controls.cpp | 99 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)

diff --git a/test/controls.cpp b/test/controls.cpp
index 94e89f270108..c4145b7a0543 100644
--- a/test/controls.cpp
+++ b/test/controls.cpp
@@ -25,6 +25,101 @@ protected:
 		return TestPass;
 	}
 
+	int testControlList()
+	{
+		ControlList list;
+
+		if (list.contains(ManualGain)) {
+			cout << "Unexpected item in the bagging area" << endl;
+			return TestFail;
+		}
+
+		if (list.size() != 0) {
+			cout << "List should contain zero elements" << endl;
+			return TestFail;
+		}
+
+		if (!list.empty()) {
+			cout << "List expected to be empty" << endl;
+			return TestFail;
+		}
+
+		/* Set a control */
+		list[ManualBrightness] = 255;
+
+		/* Contains should still not find a non set control */
+		if (list.contains(ManualGain)) {
+			cout << "Unexpected item in the bagging area" << endl;
+			return TestFail;
+		}
+
+		if (list.size() != 1) {
+			cout << "List should contain one element" << endl;
+			return TestFail;
+		}
+
+		if (list.empty()) {
+			cout << "List not expected to be empty" << endl;
+			return TestFail;
+		}
+
+		/* Finally lets find that Gain */
+		list[ManualGain] = 128;
+		if (!list.contains(ManualGain)) {
+			cout << "Couldn't identify an in-list control" << endl;
+			return TestFail;
+		}
+
+		/* Validate value retrieval */
+		if (list[ManualGain].getInt() != 128 ||
+		    list[ManualBrightness].getInt() != 255) {
+			cout << "Failed to retrieve control value" << endl;
+			return TestFail;
+		}
+
+		/* Update using ControlInfo */
+		ControlInfo gainInfo(ManualGain);
+		list.update(gainInfo, 200);
+		if (list[ManualGain].getInt() != 200) {
+			cout << "Failed to update control value" << endl;
+			return TestFail;
+		}
+
+		/* Create a new list from an existing one */
+		ControlList newList;
+
+		newList.update(list);
+
+		/*
+		 * Clear down the original list and assert items are still in
+		 * the new list
+		 */
+		list.reset();
+
+		if (list.size() != 0) {
+			cout << "Old List should contain zero elements" << endl;
+			return TestFail;
+		}
+
+		if (!list.empty()) {
+			cout << "Old List expected to be empty" << endl;
+			return TestFail;
+		}
+
+		if (newList.size() != 2) {
+			cout << "New list with incorrect size" << endl;
+			return TestFail;
+		}
+
+		if (!(newList.contains(ManualGain) &&
+		      newList.contains(ManualBrightness))) {
+			cout << "New list with incorrect items" << endl;
+			return TestFail;
+		}
+
+		return TestPass;
+	}
+
 	int run()
 	{
 		int ret;
@@ -33,6 +128,10 @@ protected:
 		if (ret)
 			return ret;
 
+		ret = testControlList();
+		if (ret)
+			return ret;
+
 		return TestPass;
 	}
 };
-- 
2.20.1



More information about the libcamera-devel mailing list