blob: b2ff26cab0d607c080ee9e411045febb9bb2e391 [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.
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngineTestUtils.h"
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h"
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h"
#include "flutter/testing/testing.h"
/**
* Fake pasteboard implementation to allow tests to work in environments without a real
* pasteboard.
*/
@interface FakePasteboard : FlutterPasteboard
@end
@implementation FakePasteboard {
NSString* _result;
}
- (NSInteger)clearContents {
size_t changeCount = (_result != nil) ? 1 : 0;
_result = nil;
return changeCount;
}
- (NSString*)stringForType:(NSPasteboardType)dataType {
return _result;
}
- (BOOL)setString:(NSString*)string forType:(NSPasteboardType)dataType {
_result = string;
return YES;
}
@end
namespace flutter::testing {
FlutterEngineTest::FlutterEngineTest() = default;
void FlutterEngineTest::SetUp() {
native_resolver_ = std::make_shared<TestDartNativeResolver>();
NSString* fixtures = @(testing::GetFixturesPath());
project_ = [[FlutterDartProject alloc]
initWithAssetsPath:fixtures
ICUDataPath:[fixtures stringByAppendingString:@"/icudtl.dat"]];
project_.rootIsolateCreateCallback = FlutterEngineTest::IsolateCreateCallback;
engine_ = [[FlutterEngine alloc] initWithName:@"test"
project:project_
allowHeadlessExecution:true];
}
void FlutterEngineTest::TearDown() {
[engine_ shutDownEngine];
engine_ = nil;
native_resolver_.reset();
}
void FlutterEngineTest::ShutDownEngine() {
[engine_ shutDownEngine];
engine_ = nil;
}
void FlutterEngineTest::IsolateCreateCallback(void* user_data) {
native_resolver_->SetNativeResolverForIsolate();
}
void FlutterEngineTest::AddNativeCallback(const char* name, Dart_NativeFunction function) {
native_resolver_->AddNativeCallback({name}, function);
}
id CreateMockFlutterEngine(NSString* pasteboardString) {
NSString* fixtures = @(testing::GetFixturesPath());
FlutterDartProject* project = [[FlutterDartProject alloc]
initWithAssetsPath:fixtures
ICUDataPath:[fixtures stringByAppendingString:@"/icudtl.dat"]];
FlutterEngine* engine = [[FlutterEngine alloc] initWithName:@"test"
project:project
allowHeadlessExecution:true];
FakePasteboard* pasteboardMock = [[FakePasteboard alloc] init];
[pasteboardMock setString:pasteboardString forType:NSPasteboardTypeString];
engine.pasteboard = pasteboardMock;
id engineMock = OCMPartialMock(engine);
return engineMock;
}
MockFlutterEngineTest::MockFlutterEngineTest() = default;
void MockFlutterEngineTest::SetUp() {
engine_mock_ = CreateMockFlutterEngine(@"");
}
void MockFlutterEngineTest::TearDown() {
[engine_mock_ shutDownEngine];
[engine_mock_ stopMocking];
engine_mock_ = nil;
}
void MockFlutterEngineTest::ShutDownEngine() {
[engine_mock_ shutDownEngine];
engine_mock_ = nil;
}
} // namespace flutter::testing