Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 4bdf1b8

Browse files
committed
[macOS] Clean up resources in ViewController tests
Wraps all FlutterViewController tests in an autorelease pool to ensure resources are cleaned up. Adds a MockFlutterEngineTest subclass of AutoreleasePoolTest that creates an OCPartialMock FlutterEngine and shuts it down at the end of the test. Previously we were not shutting down any FlutterEngine instances we allocated, resulting in potentially thousands of threads and graphics contexts being allocated. Prior to this change, running these tests via: ../out/host_debug_unopt_arm64/flutter_desktop_darwin_unittests \ --gtest_filter='FlutterViewController.*' --gtest_repeat=1000 resulted in test failures and sometimes segfaults. This ensures resources are cleaned up Eventually all unit tests should configure their FlutterEngine via either FlutterEngineTest (which should be an AutoreleasePoolTest) or MockFlutterEngineTest, and the CreateMockFlutterEngine function moved to a static used in the implementation of these. Issue: flutter/flutter#104789 Issue: flutter/flutter#127441 Issue: flutter/flutter#124840
1 parent 5833714 commit 4bdf1b8

File tree

3 files changed

+144
-71
lines changed

3 files changed

+144
-71
lines changed

shell/platform/darwin/macos/framework/Source/FlutterEngineTestUtils.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterEngine.h"
66

77
#import <OCMock/OCMock.h>
8+
9+
#include "flutter/testing/autoreleasepool_test.h"
810
#include "flutter/testing/test_dart_native_resolver.h"
911
#include "gtest/gtest.h"
1012

@@ -36,6 +38,30 @@ class FlutterEngineTest : public ::testing::Test {
3638

3739
// Returns a mock FlutterEngine that is able to work in environments
3840
// without a real pasteboard.
41+
//
42+
// Callers MUST call [mockEngine shutDownEngine] when finished with the returned engine.
3943
id CreateMockFlutterEngine(NSString* pasteboardString);
4044

45+
class MockFlutterEngineTest : public AutoreleasePoolTest {
46+
public:
47+
MockFlutterEngineTest();
48+
49+
void SetUp() override;
50+
void TearDown() override;
51+
52+
id GetMockEngine() { return engine_mock_; }
53+
54+
void ShutDownEngine();
55+
56+
~MockFlutterEngineTest() {
57+
[engine_mock_ shutDownEngine];
58+
[engine_mock_ stopMocking];
59+
}
60+
61+
private:
62+
id engine_mock_;
63+
64+
FML_DISALLOW_COPY_AND_ASSIGN(MockFlutterEngineTest);
65+
};
66+
4167
} // namespace flutter::testing

shell/platform/darwin/macos/framework/Source/FlutterEngineTestUtils.mm

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,21 @@ id CreateMockFlutterEngine(NSString* pasteboardString) {
6767
}
6868
}
6969

70+
MockFlutterEngineTest::MockFlutterEngineTest() = default;
71+
72+
void MockFlutterEngineTest::SetUp() {
73+
engine_mock_ = CreateMockFlutterEngine(@"");
74+
}
75+
76+
void MockFlutterEngineTest::TearDown() {
77+
[engine_mock_ shutDownEngine];
78+
[engine_mock_ stopMocking];
79+
engine_mock_ = nil;
80+
}
81+
82+
void MockFlutterEngineTest::ShutDownEngine() {
83+
[engine_mock_ shutDownEngine];
84+
engine_mock_ = nil;
85+
}
86+
7087
} // namespace flutter::testing

0 commit comments

Comments
 (0)