mirror of
https://github.com/google/adk-docs.git
synced 2026-09-14 16:16:59 +08:00
4f74c1c091
* Added pr checks and regression test code * Added github workflows and go.mod/go.sum * Added comments to files_to_test.txt * Moved check_go_snippets.sh * Fixed issues with workflows * Removed unneeded workflow * Revert bad change * Added runner tests * Added README * refactor(go-snippets): Unify Go module structure and dynamically update ADK dependency Consolidate all Go snippet module dependencies to a single file located at . This simplifies dependency management and ensures consistent versions across all Go examples. Update Usage: tools/go-snippets/runner.sh <build|run> [file1 file2 ...] to dynamically fetch the latest module () before running any builds or tests. This ensures that PR and regression checks always validate against the most recent ADK release, preventing outdated dependency issues. Address breaking changes in by removing the initialization from , which is no longer available. Cleaned up extraneous and files from subdirectories within , as well as the unused file. * feat(go-snippets): Reinforce strict `files_to_test.txt` adherence Reverts previous attempts to infer Go snippet dependencies and clarifies the strict testing model. - **`runner.sh`**: Restores `find_snippet_line` to rely on exact substring matching of changed files within `files_to_test.txt` lines. Adds `go get` exit code check. - **`tools/go-snippets/README.md`**: Adds "Understanding the Test Runner" section detailing `files_to_test.txt` adherence, multi-file `package main` requirements, and `_test.go` file handling. - **`runner_test.sh`**: Adds `test_find_snippet_line_multi_file_match` to verify correct behavior for multi-file snippets listed on a single line. --------- Co-authored-by: ivanmkc <ivanmkc@google.com>
165 lines
6.5 KiB
Bash
Executable File
165 lines
6.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright 2025 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# Unit tests for runner.sh.
|
|
# This script can be run directly to validate the logic of the functions in runner.sh.
|
|
|
|
# --- Test Setup ---
|
|
# Source the script to make its functions available for testing.
|
|
source "$(dirname "$0")/runner.sh"
|
|
|
|
# --- Test Harness ---
|
|
# Simple assertion function to check for equality.
|
|
assert_equals() {
|
|
local expected=$1
|
|
local actual=$2
|
|
local test_name=$3
|
|
|
|
if [ "${expected}" == "${actual}" ]; then
|
|
echo -e "[${GREEN}PASS${NC}] ${test_name}"
|
|
else
|
|
echo -e "[${RED}FAIL${NC}] ${test_name}"
|
|
echo " Expected: '${expected}'"
|
|
echo " Actual: '${actual}'"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# --- Test Cases ---
|
|
|
|
# Tests that the 'run' action correctly forms a 'go run' command,
|
|
# preserving any arguments that might be on the line.
|
|
test_get_command_for_run_action() {
|
|
local line="snippets/quickstart/main.go"
|
|
local expected="go run snippets/quickstart/main.go"
|
|
local actual=$(get_command_for_action "run" "${line}")
|
|
assert_equals "${expected}" "${actual}" "Should create correct 'run' command without arguments"
|
|
}
|
|
|
|
# Tests that the 'build' action correctly forms a 'go build' command
|
|
# and, most importantly, strips any non-.go file arguments from the line.
|
|
# This is critical because 'go build' does not accept application arguments.
|
|
test_get_command_for_build_action_strips_args() {
|
|
local line="snippets/quickstart/main.go"
|
|
local expected="go build snippets/quickstart/main.go "
|
|
local actual=$(get_command_for_action "build" "${line}")
|
|
assert_equals "${expected}" "${actual}" "Should create correct 'build' command and strip arguments"
|
|
}
|
|
|
|
# Tests that a line with multiple .go files is correctly handled for a build.
|
|
# This is important for packages that are split across multiple files.
|
|
test_get_command_for_multi_file_build() {
|
|
local line="file1.go file2.go"
|
|
local expected="go build file1.go file2.go "
|
|
local actual=$(get_command_for_action "build" "${line}")
|
|
assert_equals "${expected}" "${actual}" "Should handle multiple files correctly for build"
|
|
}
|
|
|
|
# Tests that a line with multiple .go files is correctly handled for a run.
|
|
test_get_command_for_multi_file_run() {
|
|
local line="file1.go file2.go"
|
|
local expected="go run file1.go file2.go"
|
|
local actual=$(get_command_for_action "run" "${line}")
|
|
assert_equals "${expected}" "${actual}" "Should handle multiple files correctly for run"
|
|
}
|
|
|
|
# Tests the core logic for finding a snippet in the configuration file.
|
|
# It ensures that:
|
|
# 1. The 'examples/go/' prefix is correctly stripped from the input path.
|
|
# 2. The correct line is found in the test file.
|
|
# 3. Commented-out lines are ignored.
|
|
test_find_snippet_line() {
|
|
# Create a temporary SNIPPETS_FILE for this test to isolate it.
|
|
local original_snippets_file="${SNIPPETS_FILE}"
|
|
SNIPPETS_FILE=$(mktemp)
|
|
# Populate the temporary file with test data.
|
|
# This first line acts as a negative test case. The test specifically searches for 'snippets/quickstart/main.go',
|
|
# so this line should be correctly ignored by the grep logic, ensuring the function doesn't just return the first line it finds.
|
|
echo "file1.go" > "${SNIPPETS_FILE}"
|
|
# This line is a commented-out version of our target and should also be ignored.
|
|
echo "# snippets/quickstart/main.go" >> "${SNIPPETS_FILE}" # This line should be ignored by grep.
|
|
# This is the actual line we expect the function to find and return.
|
|
echo "snippets/quickstart/main.go" >> "${SNIPPETS_FILE}" # This is the line we expect to find.
|
|
|
|
# This simulates the file path that would be passed to the script (e.g., from 'git diff').
|
|
local input_file_path="examples/go/snippets/quickstart/main.go"
|
|
local expected_line="snippets/quickstart/main.go"
|
|
|
|
# Call the function under test.
|
|
local actual_line=$(find_snippet_line "${input_file_path}")
|
|
|
|
assert_equals "${expected_line}" "${actual_line}" "Should find the correct snippet line, ignoring comments"
|
|
|
|
# Cleanup
|
|
rm "${SNIPPETS_FILE}"
|
|
SNIPPETS_FILE="${original_snippets_file}" # Restore original path
|
|
}
|
|
|
|
# Tests that find_snippet_line correctly matches a line when the changed file
|
|
# is part of a multi-file snippet listed on a single line in files_to_test.txt.
|
|
test_find_snippet_line_multi_file_match() {
|
|
local original_snippets_file="${SNIPPETS_FILE}"
|
|
SNIPPETS_FILE=$(mktemp)
|
|
|
|
# A snippet line with multiple files.
|
|
echo "snippets/my-multi-file/main.go snippets/my-multi-file/helper.go" > "${SNIPPETS_FILE}"
|
|
|
|
# Simulate changing the helper file.
|
|
local input_file_path="examples/go/snippets/my-multi-file/helper.go"
|
|
local expected_line="snippets/my-multi-file/main.go snippets/my-multi-file/helper.go"
|
|
|
|
local actual_line=$(find_snippet_line "${input_file_path}")
|
|
|
|
assert_equals "${expected_line}" "${actual_line}" "Should find the entire multi-file snippet line"
|
|
|
|
# Cleanup
|
|
rm "${SNIPPETS_FILE}"
|
|
SNIPPETS_FILE="${original_snippets_file}"
|
|
}
|
|
|
|
# Tests the logic for determining if a line should be processed.
|
|
test_should_process_line() {
|
|
# A valid line should return 0 (success).
|
|
should_process_line "file1.go"
|
|
assert_equals "0" "$?" "Should return success for a valid line"
|
|
|
|
# An empty line should return 1 (failure).
|
|
should_process_line ""
|
|
assert_equals "1" "$?" "Should return failure for an empty line"
|
|
|
|
# A line with only whitespace should return 1 (failure).
|
|
should_process_line " "
|
|
assert_equals "1" "$?" "Should return failure for a whitespace-only line"
|
|
|
|
# A commented line should return 1 (failure).
|
|
should_process_line "# file1.go"
|
|
assert_equals "1" "$?" "Should return failure for a commented line"
|
|
|
|
# A commented line with leading spaces should return 1 (failure).
|
|
should_process_line " # file1.go"
|
|
assert_equals "1" "$?" "Should return failure for a commented line with leading spaces"
|
|
}
|
|
|
|
# --- Run Tests ---
|
|
echo "Running tests for runner.sh..."
|
|
test_get_command_for_run_action
|
|
test_get_command_for_build_action_strips_args
|
|
test_get_command_for_multi_file_build
|
|
test_get_command_for_multi_file_run
|
|
test_find_snippet_line
|
|
test_find_snippet_line_multi_file_match
|
|
test_should_process_line
|
|
echo "All tests passed."
|