blob: 689a6a98ac39382a137a032ce11eb948da208dc2 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_WINDOWS_TEST_CONTEXT_H_
#define FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_WINDOWS_TEST_CONTEXT_H_
#include <string>
#include <string_view>
#include <vector>
#include "flutter/fml/closure.h"
#include "flutter/fml/macros.h"
#include "flutter/testing/test_dart_native_resolver.h"
namespace flutter {
namespace testing {
// Context associated with the current Windows test fixture.
//
// Context data includes global Flutter and Dart runtime context such as the
// path of Flutter's asset directory, ICU path, and resolvers for any
// registered native functions.
class WindowsTestContext {
public:
explicit WindowsTestContext(std::string_view assets_path = "");
virtual ~WindowsTestContext();
// Returns the path to assets required by the Flutter runtime.
const std::wstring& GetAssetsPath() const;
// Returns the path to the ICU library data file.
const std::wstring& GetIcuDataPath() const;
// Registers a native function callable from Dart code in test fixtures. In
// the Dart test fixture, the associated function can be declared as:
//
// @pragma('vm:external-name', 'IdentifyingName')
// external ReturnType functionName();
//
// where `IdentifyingName` matches the |name| parameter to this method.
void AddNativeFunction(std::string_view name, Dart_NativeFunction function);
// Returns the root isolate create callback to register with the Flutter
// runtime.
fml::closure GetRootIsolateCallback();
private:
std::wstring assets_path_;
std::wstring icu_data_path_ = L"icudtl.dat";
std::vector<fml::closure> isolate_create_callbacks_;
std::shared_ptr<TestDartNativeResolver> native_resolver_;
FML_DISALLOW_COPY_AND_ASSIGN(WindowsTestContext);
};
} // namespace testing
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_TESTING_WINDOWS_TEST_CONTEXT_H_