Skip to content

Commit 693d574

Browse files
committed
Test infra source
1 parent 89c26a9 commit 693d574

File tree

1 file changed

+161
-2
lines changed

1 file changed

+161
-2
lines changed

src/AppInstallerRepositoryCore/Microsoft/ConfigurableTestSourceFactory.cpp

Lines changed: 161 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
using namespace std::string_literals;
99
using namespace std::string_view_literals;
10+
using namespace AppInstaller::Utility::literals;
1011

1112
namespace AppInstaller::Repository::Microsoft
1213
{
@@ -29,6 +30,7 @@ namespace AppInstaller::Repository::Microsoft
2930
// TODO: If this becomes more dynamic, refactor the UserSettings code to make it easier to leverage here
3031
ParseHR(root, ".OpenHR", OpenHR);
3132
ParseHR(root, ".SearchHR", SearchHR);
33+
ParseBool(root, ".ContainsPackage", ContainsPackage);
3234
}
3335
else
3436
{
@@ -43,6 +45,9 @@ namespace AppInstaller::Repository::Microsoft
4345
// The HR to throw on Source::Search (if FAILED)
4446
HRESULT SearchHR = S_OK;
4547

48+
// If a result should be returned by search.
49+
bool ContainsPackage = false;
50+
4651
private:
4752
static void ParseHR(const Json::Value& root, const std::string& path, HRESULT& hr)
4853
{
@@ -60,10 +65,148 @@ namespace AppInstaller::Repository::Microsoft
6065
}
6166
}
6267
}
68+
69+
static void ParseBool(const Json::Value& root, const std::string& path, bool& value)
70+
{
71+
const Json::Path jsonPath(path);
72+
Json::Value node = jsonPath.resolve(root);
73+
if (!node.isNull())
74+
{
75+
if (node.isBool())
76+
{
77+
value = node.asBool();
78+
}
79+
}
80+
}
81+
};
82+
83+
// A test package that contains test data.
84+
struct TestPackage : public std::enable_shared_from_this<TestPackage>, public ICompositePackage, public IPackage, public IPackageVersion
85+
{
86+
TestPackage(std::shared_ptr<ISource> source) : m_source(std::move(source)) {}
87+
88+
Utility::LocIndString GetProperty(PackageProperty property) const override
89+
{
90+
switch (property)
91+
{
92+
case PackageProperty::Id:
93+
return "ConfigurableTestSource Package Identifier"_lis;
94+
case PackageProperty::Name:
95+
return "ConfigurableTestSource Package Name"_lis;
96+
}
97+
98+
return {};
99+
}
100+
101+
std::shared_ptr<IPackage> GetInstalled() override
102+
{
103+
return nullptr;
104+
}
105+
106+
std::vector<std::shared_ptr<IPackage>> GetAvailable() override
107+
{
108+
return { shared_from_this() };
109+
}
110+
111+
std::vector<Utility::LocIndString> GetMultiProperty(PackageMultiProperty) const override
112+
{
113+
return {};
114+
}
115+
116+
Source GetSource() const override
117+
{
118+
return { m_source };
119+
}
120+
121+
bool IsSame(const IPackage*) const override
122+
{
123+
return false;
124+
}
125+
126+
const void* CastTo(IPackageType) const override
127+
{
128+
return nullptr;
129+
}
130+
131+
std::vector<PackageVersionKey> GetVersionKeys() const override
132+
{
133+
return { {} };
134+
}
135+
136+
std::shared_ptr<IPackageVersion> GetVersion(const PackageVersionKey&) const override
137+
{
138+
return std::static_pointer_cast<IPackageVersion>(NonConstSharedFromThis());
139+
}
140+
141+
std::shared_ptr<IPackageVersion> GetLatestVersion() const override
142+
{
143+
return std::static_pointer_cast<IPackageVersion>(NonConstSharedFromThis());
144+
}
145+
146+
Utility::LocIndString GetProperty(PackageVersionProperty property) const override
147+
{
148+
switch (property)
149+
{
150+
case PackageVersionProperty::Id:
151+
return "ConfigurableTestSource Package Version Identifier"_lis;
152+
case PackageVersionProperty::Name:
153+
return "ConfigurableTestSource Package Version Name"_lis;
154+
case PackageVersionProperty::SourceIdentifier:
155+
return "ConfigurableTestSource Package Version Source Identifier"_lis;
156+
case PackageVersionProperty::SourceName:
157+
return "ConfigurableTestSource Package Version Source Name"_lis;
158+
case PackageVersionProperty::Version:
159+
return "ConfigurableTestSource Package Version Version"_lis;
160+
case PackageVersionProperty::Channel:
161+
return "ConfigurableTestSource Package Version Channel"_lis;
162+
case PackageVersionProperty::RelativePath:
163+
return "ConfigurableTestSource Package Version Relative Path"_lis;
164+
case PackageVersionProperty::ManifestSHA256Hash:
165+
return "ConfigurableTestSource Package Version Manifest SHA 256 Hash"_lis;
166+
case PackageVersionProperty::Publisher:
167+
return "ConfigurableTestSource Package Version Publisher"_lis;
168+
case PackageVersionProperty::ArpMinVersion:
169+
return "ConfigurableTestSource Package Version Arp Min Version"_lis;
170+
case PackageVersionProperty::ArpMaxVersion:
171+
return "ConfigurableTestSource Package Version Arp Max Version"_lis;
172+
case PackageVersionProperty::Moniker:
173+
return "ConfigurableTestSource Package Version Moniker"_lis;
174+
}
175+
176+
return {};
177+
}
178+
179+
std::vector<Utility::LocIndString> GetMultiProperty(PackageVersionMultiProperty) const override
180+
{
181+
return {};
182+
}
183+
184+
Manifest::Manifest GetManifest() override
185+
{
186+
Manifest::Manifest result;
187+
188+
result.Id = "ConfigurableTestSource Manifest Identifier";
189+
result.CurrentLocalization.Add<Manifest::Localization::PackageName>("ConfigurableTestSource Manifest Name");
190+
191+
return result;
192+
}
193+
194+
Metadata GetMetadata() const override
195+
{
196+
return {};
197+
}
198+
199+
private:
200+
std::shared_ptr<TestPackage> NonConstSharedFromThis() const
201+
{
202+
return const_cast<TestPackage*>(this)->shared_from_this();
203+
}
204+
205+
std::shared_ptr<ISource> m_source;
63206
};
64207

65208
// The configurable source itself.
66-
struct ConfigurableTestSource : public ISource
209+
struct ConfigurableTestSource : public std::enable_shared_from_this<ConfigurableTestSource>, public ISource
67210
{
68211
static constexpr ISourceType SourceType = ISourceType::ConfigurableTestSource;
69212

@@ -77,7 +220,18 @@ namespace AppInstaller::Repository::Microsoft
77220
SearchResult Search(const SearchRequest&) const override
78221
{
79222
THROW_IF_FAILED(m_config.SearchHR);
80-
return {};
223+
224+
SearchResult result;
225+
226+
if (m_config.ContainsPackage)
227+
{
228+
std::shared_ptr<TestPackage> package = std::make_shared<TestPackage>(NonConstSharedFromThis());
229+
PackageMatchFilter packageFilter{ {}, {} };
230+
231+
result.Matches.emplace_back(std::move(package), std::move(packageFilter));
232+
}
233+
234+
return result;
81235
}
82236

83237
void* CastTo(ISourceType type) override
@@ -91,6 +245,11 @@ namespace AppInstaller::Repository::Microsoft
91245
}
92246

93247
private:
248+
std::shared_ptr<ConfigurableTestSource> NonConstSharedFromThis() const
249+
{
250+
return const_cast<ConfigurableTestSource*>(this)->shared_from_this();
251+
}
252+
94253
SourceDetails m_details;
95254
TestSourceConfiguration m_config;
96255
};

0 commit comments

Comments
 (0)