Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reland "Build iOS unittest target in unopt builds" (#44356)"" (#45346)" #45519

Merged
merged 3 commits into from
Sep 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 149,10 @@ group("unittests") {
[ "//flutter/shell/platform/android:flutter_shell_native_unittests" ]
}

if (is_ios) {
public_deps = [ "//flutter/shell/platform/darwin/ios:ios_test_flutter" ]
}

# Compile all unittests targets if enabled.
if (enable_unittests) {
public_deps = [
Expand Down
2 changes: 1 addition & 1 deletion shell/platform/darwin/ios/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 270,7 @@ source_set("ios_test_flutter_mrc") {

shared_library("ios_test_flutter") {
testonly = true
visibility = [ ":*" ]
visibility = [ "*" ]
cflags = [
"-fvisibility=default",
"-F$platform_frameworks_path",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 16,7 @@
XCTAssertTrue([value isEqualToString:expected], \
@"String \"%@\" not equal to the expected value of \"%@\"", value, expected)

namespace {
API_AVAILABLE(ios(13.4))
constexpr UIKeyboardHIDUsage keyACode = (UIKeyboardHIDUsage)0x4; // KeyA iOS scan code.
} // namespace
using namespace flutter::testing;

API_AVAILABLE(ios(13.4))
@interface FlutterChannelKeyResponderTest : XCTestCase
Expand All @@ -35,8 32,8 @@ - (void)setUp {
} else {
XCTSkip(@"Required API not present for test.");
}
_testKeyDownEvent = keyDownEvent(keyACode, 0x0, 0.0f, "a", "a");
_testKeyUpEvent = keyUpEvent(keyACode, 0x0, 0.0f);
_testKeyDownEvent = keyDownEvent(UIKeyboardHIDUsageKeyboardA, 0x0, 0.0f, "a", "a");
_testKeyUpEvent = keyUpEvent(UIKeyboardHIDUsageKeyboardA, 0x0, 0.0f);
}

- (void)tearDown API_AVAILABLE(ios(13.4)) {
Expand Down Expand Up @@ -76,7 73,7 @@ - (void)testBasicKeyEvent API_AVAILABLE(ios(13.4)) {
XCTAssertEqual([messages count], 1u);
XCTAssertStrEqual([messages lastObject][@"keymap"], @"ios");
XCTAssertStrEqual([messages lastObject][@"type"], @"keydown");
XCTAssertEqual([[messages lastObject][@"keyCode"] intValue], keyACode);
XCTAssertEqual([[messages lastObject][@"keyCode"] intValue], UIKeyboardHIDUsageKeyboardA);
XCTAssertEqual([[messages lastObject][@"modifiers"] intValue], 0x0);
XCTAssertStrEqual([messages lastObject][@"characters"], @"a");
XCTAssertStrEqual([messages lastObject][@"charactersIgnoringModifiers"], @"a");
Expand All @@ -97,7 94,7 @@ - (void)testBasicKeyEvent API_AVAILABLE(ios(13.4)) {
XCTAssertEqual([messages count], 1u);
XCTAssertStrEqual([messages lastObject][@"keymap"], @"ios");
XCTAssertStrEqual([messages lastObject][@"type"], @"keyup");
XCTAssertEqual([[messages lastObject][@"keyCode"] intValue], keyACode);
XCTAssertEqual([[messages lastObject][@"keyCode"] intValue], UIKeyboardHIDUsageKeyboardA);
XCTAssertEqual([[messages lastObject][@"modifiers"] intValue], 0x0);

XCTAssertEqual([responses count], 1u);
Expand Down Expand Up @@ -134,7 131,7 @@ - (void)testEmptyResponseIsTakenAsHandled API_AVAILABLE(ios(13.4)) {
XCTAssertEqual([messages count], 1u);
XCTAssertStrEqual([messages lastObject][@"keymap"], @"ios");
XCTAssertStrEqual([messages lastObject][@"type"], @"keydown");
XCTAssertEqual([[messages lastObject][@"keyCode"] intValue], keyACode);
XCTAssertEqual([[messages lastObject][@"keyCode"] intValue], UIKeyboardHIDUsageKeyboardA);
XCTAssertEqual([[messages lastObject][@"modifiers"] intValue], 0x0);
XCTAssertStrEqual([messages lastObject][@"characters"], @"a");
XCTAssertStrEqual([messages lastObject][@"charactersIgnoringModifiers"], @"a");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 15,7 @@
#include "flutter/shell/platform/embedder/test_utils/key_codes.g.h"

using namespace flutter::testing::keycodes;
using namespace flutter::testing;

FLUTTER_ASSERT_ARC;

Expand Down Expand Up @@ -43,7 44,7 @@ - (instancetype)initWithEvent:(const FlutterKeyEvent*)event
if (event->character != nullptr) {
size_t len = strlen(event->character);
char* character = new char[len 1];
strcpy(character, event->character);
strlcpy(character, event->character, len 1);
_data->character = character;
}
_callback = callback;
Expand All @@ -63,8 64,9 @@ - (void)respond:(BOOL)handled {
}

- (void)dealloc {
if (_data->character != nullptr)
if (_data->character != nullptr) {
delete[] _data->character;
}
delete _data;
}
@end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 132,7 @@ - (void)testReleasesProjectOnDealloc {
FlutterDartProject* mockProject = OCMClassMock([FlutterDartProject class]);
FlutterEngineGroup* group = [[FlutterEngineGroup alloc] initWithName:@"foo"
project:mockProject];
XCTAssertNotNil(group);
weakProject = mockProject;
XCTAssertNotNil(weakProject);
group = nil;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 60,7 @@ - (void)testEnableSemanticsWhenFlutterViewAccessibilityDidCall {
engine.ensureSemanticsEnabledCalled = NO;
[engine flutterViewAccessibilityDidCall];
XCTAssertTrue(engine.ensureSemanticsEnabledCalled);
[engine release];
}

@end
31 changes: 17 additions & 14 deletions shell/platform/darwin/ios/framework/Source/FlutterFakeKeyEvents.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,26 47,29 @@ API_AVAILABLE(ios(13.4))
@property(readwrite, nonatomic) NSString* dataCharactersIgnoringModifiers;
@end

FlutterUIPressProxy* keyDownEvent(UIKeyboardHIDUsage keyCode,
UIKeyModifierFlags modifierFlags = 0x0,
NSTimeInterval timestamp = 0.0f,
const char* characters = "",
const char* charactersIgnoringModifiers = "")
namespace flutter {
namespace testing {
extern FlutterUIPressProxy* keyDownEvent(UIKeyboardHIDUsage keyCode,
UIKeyModifierFlags modifierFlags = 0x0,
NSTimeInterval timestamp = 0.0f,
const char* characters = "",
const char* charactersIgnoringModifiers = "")
API_AVAILABLE(ios(13.4));

FlutterUIPressProxy* keyUpEvent(UIKeyboardHIDUsage keyCode,
UIKeyModifierFlags modifierFlags = 0x0,
NSTimeInterval timestamp = 0.0f,
const char* characters = "",
const char* charactersIgnoringModifiers = "")
API_AVAILABLE(ios(13.4));

FlutterUIPressProxy* keyEventWithPhase(UIPressPhase phase,
UIKeyboardHIDUsage keyCode,
extern FlutterUIPressProxy* keyUpEvent(UIKeyboardHIDUsage keyCode,
UIKeyModifierFlags modifierFlags = 0x0,
NSTimeInterval timestamp = 0.0f,
const char* characters = "",
const char* charactersIgnoringModifiers = "")
API_AVAILABLE(ios(13.4));

extern FlutterUIPressProxy* keyEventWithPhase(UIPressPhase phase,
UIKeyboardHIDUsage keyCode,
UIKeyModifierFlags modifierFlags = 0x0,
NSTimeInterval timestamp = 0.0f,
const char* characters = "",
const char* charactersIgnoringModifiers = "")
API_AVAILABLE(ios(13.4));
} // namespace testing
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_DARWIN_IOS_FRAMEWORK_SOURCE_FLUTTER_FAKE_KEY_EVENTS_H_
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 84,9 @@ - (NSString*)charactersIgnoringModifiers API_AVAILABLE(ios(13.4)) {
}
@end

namespace flutter {
namespace testing {

FlutterUIPressProxy* keyDownEvent(UIKeyboardHIDUsage keyCode,
UIKeyModifierFlags modifierFlags,
NSTimeInterval timestamp,
Expand Down Expand Up @@ -123,3 126,5 @@ - (NSString*)charactersIgnoringModifiers API_AVAILABLE(ios(13.4)) {
type:UIEventTypePresses
timestamp:timestamp];
}
} // namespace testing
} // namespace flutter
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 21,8 @@
class PointerDataPacket {};
} // namespace flutter

using namespace flutter::testing;

/// Sometimes we have to use a custom mock to avoid retain cycles in ocmock.
@interface FlutterEnginePartialMock : FlutterEngine
@property(nonatomic, strong) FlutterBasicMessageChannel* lifecycleChannel;
Expand Down
Loading