mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
63 lines
2.0 KiB
C++
63 lines
2.0 KiB
C++
// 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.
|
|
|
|
#include "flutter/shell/platform/embedder/embedder.h"
|
|
|
|
#include <set>
|
|
|
|
#include "flutter/testing/testing.h"
|
|
|
|
#ifdef _WIN32
|
|
// winbase.h defines GetCurrentTime as a macro.
|
|
#undef GetCurrentTime
|
|
#endif
|
|
|
|
namespace flutter {
|
|
namespace testing {
|
|
|
|
// Verifies that the proc table is fully populated.
|
|
TEST(EmbedderProcTable, AllPointersProvided) {
|
|
FlutterEngineProcTable procs = {};
|
|
procs.struct_size = sizeof(FlutterEngineProcTable);
|
|
ASSERT_EQ(FlutterEngineGetProcAddresses(&procs), kSuccess);
|
|
|
|
void (**proc)() = reinterpret_cast<void (**)()>(&procs.CreateAOTData);
|
|
const uintptr_t end_address =
|
|
reinterpret_cast<uintptr_t>(&procs) + procs.struct_size;
|
|
while (reinterpret_cast<uintptr_t>(proc) < end_address) {
|
|
EXPECT_NE(*proc, nullptr);
|
|
++proc;
|
|
}
|
|
}
|
|
|
|
// Ensures that there are no duplicate pointers in the proc table, to catch
|
|
// copy/paste mistakes when adding a new entry to FlutterEngineGetProcAddresses.
|
|
TEST(EmbedderProcTable, NoDuplicatePointers) {
|
|
FlutterEngineProcTable procs = {};
|
|
procs.struct_size = sizeof(FlutterEngineProcTable);
|
|
ASSERT_EQ(FlutterEngineGetProcAddresses(&procs), kSuccess);
|
|
|
|
void (**proc)() = reinterpret_cast<void (**)()>(&procs.CreateAOTData);
|
|
const uintptr_t end_address =
|
|
reinterpret_cast<uintptr_t>(&procs) + procs.struct_size;
|
|
std::set<void (*)()> seen_procs;
|
|
while (reinterpret_cast<uintptr_t>(proc) < end_address) {
|
|
auto result = seen_procs.insert(*proc);
|
|
EXPECT_TRUE(result.second);
|
|
++proc;
|
|
}
|
|
}
|
|
|
|
// Spot-checks that calling one of the function pointers works.
|
|
TEST(EmbedderProcTable, CallProc) {
|
|
FlutterEngineProcTable procs = {};
|
|
procs.struct_size = sizeof(FlutterEngineProcTable);
|
|
ASSERT_EQ(FlutterEngineGetProcAddresses(&procs), kSuccess);
|
|
|
|
EXPECT_NE(procs.GetCurrentTime(), 0ULL);
|
|
}
|
|
|
|
} // namespace testing
|
|
} // namespace flutter
|