KiCad PCB EDA Suite
Loading...
Searching...
No Matches
test_expand_text_vars.cpp File Reference
#include <boost/test/unit_test.hpp>
#include <atomic>
#include <filesystem>
#include <optional>
#include <thread>
#include <vector>
#include <common.h>
#include <env_paths.h>
#include <jobs/job_export_pcb_stats.h>
#include <pgm_base.h>
#include <settings/environment.h>
#include <title_block.h>
#include <wx/filename.h>
#include <wx/utils.h>

Go to the source code of this file.

Classes

struct  ExpandTextVarsFixture
 Test fixture for ExpandTextVars tests. More...
 
struct  OverlappingEnvVarsFixture
 Regression tests for overlapping-prefix environment variables. More...
 
struct  EnvVarRecursiveExpansionFixture
 Regression test for KiCad GitLab issue #24244. More...
 

Macros

#define BOOST_TEST_NO_MAIN
 

Functions

 BOOST_AUTO_TEST_CASE (SimpleVariable)
 
 BOOST_AUTO_TEST_CASE (MultipleVariables)
 
 BOOST_AUTO_TEST_CASE (EscapedVariable)
 
 BOOST_AUTO_TEST_CASE (EscapedThenRegularVariable)
 
 BOOST_AUTO_TEST_CASE (RegularThenEscapedVariable)
 
 BOOST_AUTO_TEST_CASE (EscapedInsideMathExpression)
 
 BOOST_AUTO_TEST_CASE (EscapedInsideVariableReference)
 
 BOOST_AUTO_TEST_CASE (MultipleEscapedInMathExpression)
 
 BOOST_AUTO_TEST_CASE (EscapedAtInExpression)
 
 BOOST_AUTO_TEST_CASE (ConsecutiveEscaped)
 
 BOOST_AUTO_TEST_CASE (BackslashBeforeVariableIsEscape)
 
 BOOST_AUTO_TEST_CASE (ForwardSlashBeforeVariableExpands)
 
 BOOST_AUTO_TEST_CASE (BackslashPathSeparatorBeforeTextVar)
 
 BOOST_AUTO_TEST_CASE (BackslashPathSeparatorBeforeMultipleTextVars)
 
 BOOST_AUTO_TEST_CASE (TextVarNotFirstInFilename)
 
 BOOST_AUTO_TEST_CASE (NormalizePicksLongestPrefix)
 
 BOOST_AUTO_TEST_CASE (RoundTripPreservesAbsolutePath)
 
 BOOST_AUTO_TEST_CASE (ParallelResolveTextVarsWithMathExpressions)
 Regression test for KiCad GitLab issue #23962.
 
 BOOST_AUTO_TEST_CASE (ExpandsNestedReferences)
 
 BOOST_AUTO_TEST_CASE (UndefinedReferenceLeavesLiteralMarker)
 

Macro Definition Documentation

◆ BOOST_TEST_NO_MAIN

#define BOOST_TEST_NO_MAIN

Definition at line 21 of file test_expand_text_vars.cpp.

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/20]

BOOST_AUTO_TEST_CASE ( BackslashBeforeVariableIsEscape )

Definition at line 193 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [2/20]

BOOST_AUTO_TEST_CASE ( BackslashPathSeparatorBeforeMultipleTextVars )

◆ BOOST_AUTO_TEST_CASE() [3/20]

BOOST_AUTO_TEST_CASE ( BackslashPathSeparatorBeforeTextVar )

◆ BOOST_AUTO_TEST_CASE() [4/20]

BOOST_AUTO_TEST_CASE ( ConsecutiveEscaped )

Definition at line 172 of file test_expand_text_vars.cpp.

References BOOST_CHECK_EQUAL(), ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [5/20]

BOOST_AUTO_TEST_CASE ( EscapedAtInExpression )

Definition at line 162 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [6/20]

BOOST_AUTO_TEST_CASE ( EscapedInsideMathExpression )

Definition at line 109 of file test_expand_text_vars.cpp.

References BOOST_CHECK_MESSAGE(), ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [7/20]

BOOST_AUTO_TEST_CASE ( EscapedInsideVariableReference )

Definition at line 128 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [8/20]

BOOST_AUTO_TEST_CASE ( EscapedThenRegularVariable )

Definition at line 90 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [9/20]

BOOST_AUTO_TEST_CASE ( EscapedVariable )

Definition at line 82 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [10/20]

BOOST_AUTO_TEST_CASE ( ExpandsNestedReferences )

◆ BOOST_AUTO_TEST_CASE() [11/20]

BOOST_AUTO_TEST_CASE ( ForwardSlashBeforeVariableExpands )

Definition at line 203 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [12/20]

BOOST_AUTO_TEST_CASE ( MultipleEscapedInMathExpression )

◆ BOOST_AUTO_TEST_CASE() [13/20]

BOOST_AUTO_TEST_CASE ( MultipleVariables )

Definition at line 75 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [14/20]

BOOST_AUTO_TEST_CASE ( NormalizePicksLongestPrefix )

◆ BOOST_AUTO_TEST_CASE() [15/20]

BOOST_AUTO_TEST_CASE ( ParallelResolveTextVarsWithMathExpressions )

Regression test for KiCad GitLab issue #23962.

ResolveTextVars and ExpandTextVars used a function-local static EXPRESSION_EVALUATOR shared across all threads. CONNECTION_GRAPH evaluates schematic labels in parallel via a thread pool and label text may contain...} expressions, which caused the shared evaluator's internal ERROR_COLLECTOR vector to be mutated concurrently, leading to heap corruption and a segfault inside std::vector::clear.

This test hammers ResolveTextVars from many threads to make the race observable, primarily under TSan. It also serves as a smoke test that no thread crashes.

Definition at line 394 of file test_expand_text_vars.cpp.

References BOOST_AUTO_TEST_CASE(), BOOST_CHECK_EQUAL(), resolver, ResolveTextVars(), and result.

◆ BOOST_AUTO_TEST_CASE() [16/20]

BOOST_AUTO_TEST_CASE ( RegularThenEscapedVariable )

Definition at line 99 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [17/20]

BOOST_AUTO_TEST_CASE ( RoundTripPreservesAbsolutePath )

◆ BOOST_AUTO_TEST_CASE() [18/20]

BOOST_AUTO_TEST_CASE ( SimpleVariable )

Definition at line 68 of file test_expand_text_vars.cpp.

References BOOST_AUTO_TEST_CASE(), ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [19/20]

BOOST_AUTO_TEST_CASE ( TextVarNotFirstInFilename )

◆ BOOST_AUTO_TEST_CASE() [20/20]

BOOST_AUTO_TEST_CASE ( UndefinedReferenceLeavesLiteralMarker )

Definition at line 528 of file test_expand_text_vars.cpp.

References BOOST_REQUIRE(), and ExpandEnvVarSubstitutions().