Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
proc_table_gles_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <optional>
6
7#include "flutter/testing/testing.h" // IWYU pragma: keep
8#include "gmock/gmock.h"
9#include "gtest/gtest.h"
12
13namespace impeller {
14namespace testing {
15
16using ::testing::_;
17
18#define EXPECT_AVAILABLE(proc_ivar) \
19 EXPECT_TRUE(mock_gles->GetProcTable().proc_ivar.IsAvailable());
20#define EXPECT_UNAVAILABLE(proc_ivar) \
21 EXPECT_FALSE(mock_gles->GetProcTable().proc_ivar.IsAvailable());
22
23TEST(ProcTableGLES, ResolvesCorrectClearDepthProcOnES) {
24 auto mock_gles = MockGLES::Init(std::nullopt, "OpenGL ES 3.0");
25 EXPECT_TRUE(mock_gles->GetProcTable().GetDescription()->IsES());
26
29}
30
31TEST(ProcTableGLES, ResolvesCorrectClearDepthProcOnDesktopGL) {
32 auto mock_gles = MockGLES::Init(std::nullopt, "OpenGL 4.0");
33 EXPECT_FALSE(mock_gles->GetProcTable().GetDescription()->IsES());
34
37}
38
39TEST(ProcTableGLES, CheckFrameBufferStatusDebugOnly) {
40 auto mock_gles_impl = std::make_unique<MockGLESImpl>();
41#ifdef IMPELLER_DEBUG
42 EXPECT_CALL(*mock_gles_impl, CheckFramebufferStatus(_)).Times(1);
43#else
44 EXPECT_CALL(*mock_gles_impl, CheckFramebufferStatus(_)).Times(0);
45#endif
46 auto mock_gles = MockGLES::Init(std::move(mock_gles_impl));
47 mock_gles->GetProcTable().CheckFramebufferStatusDebug(0);
48}
49
50TEST(ProcTableGLES, GLES2VertexAttribDivisor) {
51 const auto extensions = std::vector<const char*>{"GL_EXT_instanced_arrays"};
52 auto mock_gles = MockGLES::Init(extensions);
53 EXPECT_TRUE(mock_gles->GetProcTable().VertexAttribDivisorEXT.IsAvailable());
54}
55
56TEST(ProcTableGLES, GLES3VertexAttribDivisor) {
57 auto mock_gles = MockGLES::Init();
58 EXPECT_FALSE(mock_gles->GetProcTable().VertexAttribDivisorEXT.IsAvailable());
59 EXPECT_TRUE(mock_gles->GetProcTable().VertexAttribDivisor.IsAvailable());
60}
61
62TEST(GLErrorToString, ReturnsCorrectStringForKnownErrors) {
63 EXPECT_EQ(GLErrorToString(GL_NO_ERROR), "GL_NO_ERROR");
64 EXPECT_EQ(GLErrorToString(GL_INVALID_ENUM), "GL_INVALID_ENUM");
65 EXPECT_EQ(GLErrorToString(GL_INVALID_VALUE), "GL_INVALID_VALUE");
66 EXPECT_EQ(GLErrorToString(GL_INVALID_OPERATION), "GL_INVALID_OPERATION");
67 EXPECT_EQ(GLErrorToString(GL_INVALID_FRAMEBUFFER_OPERATION),
68 "GL_INVALID_FRAMEBUFFER_OPERATION");
69 EXPECT_EQ(GLErrorToString(GL_FRAMEBUFFER_COMPLETE),
70 "GL_FRAMEBUFFER_COMPLETE");
71 EXPECT_EQ(GLErrorToString(GL_OUT_OF_MEMORY), "GL_OUT_OF_MEMORY");
72}
73
74TEST(GLErrorToString, ReturnsUnknownForInvalidError) {
75 // Test with an invalid error code
76 GLenum invalid_error = 0x9999;
77 EXPECT_EQ(GLErrorToString(invalid_error), "Unknown.");
78}
79
80TEST(GLErrorToString, ReturnValueIsValidStringView) {
81 // Test that the returned string_view is valid and non-empty
82 auto result = GLErrorToString(GL_NO_ERROR);
83 EXPECT_FALSE(result.empty());
84 EXPECT_NE(result.data(), nullptr);
85
86 // Test that we can compare with string literals
87 EXPECT_TRUE(result == "GL_NO_ERROR");
88}
89
90TEST(GLProc, NameFieldWorksWithStringView) {
91 GLProc<void()> proc;
92
93 // Test setting name with string literal
94 const char* literal = "glTestFunction";
95 proc.name = literal;
96
97 EXPECT_EQ(proc.name, "glTestFunction");
98 EXPECT_FALSE(proc.name.empty());
99
100 // Test that the string_view properly references the original data
101 EXPECT_EQ(proc.name.data(), literal);
102}
103
104} // namespace testing
105} // namespace impeller
static std::shared_ptr< MockGLES > Init(std::unique_ptr< MockGLESImpl > impl, const std::optional< std::vector< const char * > > &extensions=std::nullopt, const char *version_string="OpenGL ES 3.0")
Definition mock_gles.cc:417
TEST(FrameTimingsRecorderTest, RecordVsync)
std::string_view GLErrorToString(GLenum value)
#define FOR_EACH_IMPELLER_DESKTOP_ONLY_PROC(PROC)
#define FOR_EACH_IMPELLER_ES_ONLY_PROC(PROC)
#define EXPECT_AVAILABLE(proc_ivar)
#define EXPECT_UNAVAILABLE(proc_ivar)
std::string_view name