|
10 | 10 | #include <future> |
11 | 11 | #include <memory> |
12 | 12 |
|
| 13 | +#include "assets/directory_asset_bundle.h" |
13 | 14 | #include "flutter/flow/layers/layer_tree.h" |
14 | 15 | #include "flutter/flow/layers/picture_layer.h" |
15 | 16 | #include "flutter/flow/layers/transform_layer.h" |
@@ -2208,5 +2209,70 @@ TEST_F(ShellTest, EngineRootIsolateLaunchesDontTakeVMDataSettings) { |
2208 | 2209 | isolate_create_latch.Wait(); |
2209 | 2210 | } |
2210 | 2211 |
|
| 2212 | +TEST_F(ShellTest, AssetManagerSingle) { |
| 2213 | + fml::ScopedTemporaryDirectory asset_dir; |
| 2214 | + fml::UniqueFD asset_dir_fd = fml::OpenDirectory( |
| 2215 | + asset_dir.path().c_str(), false, fml::FilePermission::kRead); |
| 2216 | + |
| 2217 | + std::string filename = "test"; |
| 2218 | + |
| 2219 | + bool success = fml::WriteAtomically(asset_dir_fd, filename.c_str(), |
| 2220 | + fml::DataMapping(filename)); |
| 2221 | + ASSERT_TRUE(success); |
| 2222 | + |
| 2223 | + AssetManager asset_manager; |
| 2224 | + asset_manager.PushBack( |
| 2225 | + std::make_unique<DirectoryAssetBundle>(std::move(asset_dir_fd), false)); |
| 2226 | + |
| 2227 | + auto mapping = asset_manager.GetAsMapping(filename); |
| 2228 | + ASSERT_TRUE(mapping != nullptr); |
| 2229 | + |
| 2230 | + std::string result(reinterpret_cast<const char*>(mapping->GetMapping()), |
| 2231 | + mapping->GetSize()); |
| 2232 | + |
| 2233 | + ASSERT_TRUE(result == filename); |
| 2234 | +} |
| 2235 | +TEST_F(ShellTest, AssetManagerMulti) { |
| 2236 | + fml::ScopedTemporaryDirectory asset_dir; |
| 2237 | + fml::UniqueFD asset_dir_fd = fml::OpenDirectory( |
| 2238 | + asset_dir.path().c_str(), false, fml::FilePermission::kRead); |
| 2239 | + |
| 2240 | + std::vector<std::string> filenames = { |
| 2241 | + "good0", |
| 2242 | + "bad0", |
| 2243 | + "good1", |
| 2244 | + "bad1", |
| 2245 | + }; |
| 2246 | + |
| 2247 | + for (auto filename : filenames) { |
| 2248 | + bool success = fml::WriteAtomically(asset_dir_fd, filename.c_str(), |
| 2249 | + fml::DataMapping(filename)); |
| 2250 | + ASSERT_TRUE(success); |
| 2251 | + } |
| 2252 | + |
| 2253 | + AssetManager asset_manager; |
| 2254 | + asset_manager.PushBack( |
| 2255 | + std::make_unique<DirectoryAssetBundle>(std::move(asset_dir_fd), false)); |
| 2256 | + |
| 2257 | + auto mappings = asset_manager.GetAsMappings("(.*)"); |
| 2258 | + ASSERT_TRUE(mappings.size() == 4); |
| 2259 | + |
| 2260 | + std::vector<std::string> expected_results = { |
| 2261 | + "good0", |
| 2262 | + "good1", |
| 2263 | + }; |
| 2264 | + |
| 2265 | + mappings = asset_manager.GetAsMappings("(.*)good(.*)"); |
| 2266 | + ASSERT_TRUE(mappings.size() == expected_results.size()); |
| 2267 | + |
| 2268 | + for (auto& mapping : mappings) { |
| 2269 | + std::string result(reinterpret_cast<const char*>(mapping->GetMapping()), |
| 2270 | + mapping->GetSize()); |
| 2271 | + ASSERT_NE( |
| 2272 | + std::find(expected_results.begin(), expected_results.end(), result), |
| 2273 | + expected_results.end()); |
| 2274 | + } |
| 2275 | +} |
| 2276 | + |
2211 | 2277 | } // namespace testing |
2212 | 2278 | } // namespace flutter |
0 commit comments