mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2025-12-27 10:33:59 -05:00
- Add comprehensive test suite covering all Claude Explain functionality: - Basic pane opening and consent flow - no-ai directive detection - API interactions and error handling - Options/customization features - Caching behavior and persistence - Compilation state handling - State persistence across page loads - Fix caching bug in explain-view.ts: - Cache was incorrectly implemented as instance variable, losing cached explanations when panes were closed/reopened - Made cache static to persist across all pane instances (matches consent persistence pattern) - Fixes failing "Caching and reload" Cypress test - Aligns implementation with documented behavior: "shared across all explain views in the session" - Add test utilities and helpers: - Monaco editor content manipulation using clipboard events - Claude Explain specific helpers moved to test file - General utilities remain in utils.ts - Performance optimizations: - Clear Cypress intercepts in afterEach to prevent O(n²) degradation - Use :visible selectors to avoid GoldenLayout template elements - Proper mock setup timing to prevent race conditions - Add comprehensive README with lessons learned and best practices All tests use fake test data (test_first, focus_a, etc.) to clearly distinguish from production values and prevent accidental API calls.
69 lines
2.7 KiB
TypeScript
69 lines
2.7 KiB
TypeScript
// Copyright (c) 2025, Compiler Explorer Authors
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright notice,
|
|
// this list of conditions and the following disclaimer.
|
|
// * Redistributions in binary form must reproduce the above copyright
|
|
// notice, this list of conditions and the following disclaimer in the
|
|
// documentation and/or other materials provided with the distribution.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
// POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
import {setMonacoEditorContent} from '../support/utils';
|
|
|
|
describe('Monaco Editor Utilities', () => {
|
|
beforeEach(() => {
|
|
cy.visit('/');
|
|
});
|
|
|
|
it('should set simple code content', () => {
|
|
const simpleCode = 'int main() { return 42; }';
|
|
setMonacoEditorContent(simpleCode);
|
|
|
|
// Verify the content was set (basic check)
|
|
cy.get('.monaco-editor').should('contain.text', 'main');
|
|
});
|
|
|
|
it('should set complex multi-line code content', () => {
|
|
const complexCode = `#include <iostream>
|
|
#include <vector>
|
|
|
|
int main() {
|
|
std::vector<int> nums = {1, 2, 3, 4, 5};
|
|
|
|
for (int num : nums) {
|
|
std::cout << num << std::endl;
|
|
}
|
|
|
|
return 0;
|
|
}`;
|
|
setMonacoEditorContent(complexCode);
|
|
|
|
// Verify the content was set (basic check)
|
|
cy.get('.monaco-editor').should('contain.text', 'iostream');
|
|
cy.get('.monaco-editor').should('contain.text', 'vector');
|
|
});
|
|
|
|
it('should handle special characters and quotes', () => {
|
|
const codeWithSpecialChars = `const char* message = "Hello, \"World\"!";
|
|
int result = (x > 0) ? x : -x;`;
|
|
setMonacoEditorContent(codeWithSpecialChars);
|
|
|
|
// Verify the content was set (basic check)
|
|
cy.get('.monaco-editor').should('contain.text', 'Hello');
|
|
});
|
|
});
|