IVGCVSW-6635 Expose a new MockWorkloadFactory and MockMemManager (Part 1)

* Create a MockBackend in armnnTestUtils.
* Create corresponding WorkloadFactory, TensorHandle, TensorHandleFactory
  MemoryManager and WorkloadFactoryHelper classes.

Signed-off-by: Colm Donelan <colm.donelan@arm.com>
Change-Id: I884731b109bc623a7272e5ad333ff754f8c13ae1
diff --git a/src/armnnTestUtils/MockTensorHandleFactory.cpp b/src/armnnTestUtils/MockTensorHandleFactory.cpp
new file mode 100644
index 0000000..e90f318
--- /dev/null
+++ b/src/armnnTestUtils/MockTensorHandleFactory.cpp
@@ -0,0 +1,87 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "MockTensorHandleFactory.hpp"
+#include <armnnTestUtils/MockTensorHandle.hpp>
+
+namespace armnn
+{
+
+using FactoryId = ITensorHandleFactory::FactoryId;
+
+const FactoryId& MockTensorHandleFactory::GetIdStatic()
+{
+    static const FactoryId s_Id(MockTensorHandleFactoryId());
+    return s_Id;
+}
+
+std::unique_ptr<ITensorHandle> MockTensorHandleFactory::CreateSubTensorHandle(ITensorHandle&,
+                                                                              TensorShape const&,
+                                                                              unsigned int const*) const
+{
+    return nullptr;
+}
+
+std::unique_ptr<ITensorHandle> MockTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo) const
+{
+    return std::make_unique<MockTensorHandle>(tensorInfo, m_MemoryManager);
+}
+
+std::unique_ptr<ITensorHandle> MockTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo,
+                                                                           DataLayout dataLayout) const
+{
+    IgnoreUnused(dataLayout);
+    return std::make_unique<MockTensorHandle>(tensorInfo, m_MemoryManager);
+}
+
+std::unique_ptr<ITensorHandle> MockTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo,
+                                                                           const bool IsMemoryManaged) const
+{
+    if (IsMemoryManaged)
+    {
+        return std::make_unique<MockTensorHandle>(tensorInfo, m_MemoryManager);
+    }
+    else
+    {
+        return std::make_unique<MockTensorHandle>(tensorInfo, m_ImportFlags);
+    }
+}
+
+std::unique_ptr<ITensorHandle> MockTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo,
+                                                                           DataLayout dataLayout,
+                                                                           const bool IsMemoryManaged) const
+{
+    IgnoreUnused(dataLayout);
+    if (IsMemoryManaged)
+    {
+        return std::make_unique<MockTensorHandle>(tensorInfo, m_MemoryManager);
+    }
+    else
+    {
+        return std::make_unique<MockTensorHandle>(tensorInfo, m_ImportFlags);
+    }
+}
+
+const FactoryId& MockTensorHandleFactory::GetId() const
+{
+    return GetIdStatic();
+}
+
+bool MockTensorHandleFactory::SupportsSubTensors() const
+{
+    return false;
+}
+
+MemorySourceFlags MockTensorHandleFactory::GetExportFlags() const
+{
+    return m_ExportFlags;
+}
+
+MemorySourceFlags MockTensorHandleFactory::GetImportFlags() const
+{
+    return m_ImportFlags;
+}
+
+}    // namespace armnn
\ No newline at end of file