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 <env_vars.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...
 
struct  VersionedEnvVarFallbackFixture
 Regression test for KiCad GitLab issue #24460. 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 (BackslashSeparatorBeforeVarExpands)
 
 BOOST_AUTO_TEST_CASE (MultipleVarsAfterBackslashSeparators)
 
 BOOST_AUTO_TEST_CASE (ForwardSlashPathUnchanged)
 
 BOOST_AUTO_TEST_CASE (NonVariableBackslashesArePreserved)
 
 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)
 
 BOOST_AUTO_TEST_CASE (UserVarIsNotTreatedAsVersionedLibraryDir)
 
 BOOST_AUTO_TEST_CASE (LegacyVersionedVarStillResolvesToCurrentDir)
 
 BOOST_AUTO_TEST_CASE (DeprecatedUnversionedAliasStillResolves)
 
 BOOST_AUTO_TEST_CASE (IsVersionedEnvVarPredicate)
 

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/28]

BOOST_AUTO_TEST_CASE ( BackslashBeforeVariableIsEscape )

Definition at line 194 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [2/28]

BOOST_AUTO_TEST_CASE ( BackslashPathSeparatorBeforeMultipleTextVars )

◆ BOOST_AUTO_TEST_CASE() [3/28]

BOOST_AUTO_TEST_CASE ( BackslashPathSeparatorBeforeTextVar )

◆ BOOST_AUTO_TEST_CASE() [4/28]

BOOST_AUTO_TEST_CASE ( BackslashSeparatorBeforeVarExpands )

◆ BOOST_AUTO_TEST_CASE() [5/28]

BOOST_AUTO_TEST_CASE ( ConsecutiveEscaped )

Definition at line 173 of file test_expand_text_vars.cpp.

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

◆ BOOST_AUTO_TEST_CASE() [6/28]

BOOST_AUTO_TEST_CASE ( DeprecatedUnversionedAliasStillResolves )

◆ BOOST_AUTO_TEST_CASE() [7/28]

BOOST_AUTO_TEST_CASE ( EscapedAtInExpression )

Definition at line 163 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [8/28]

BOOST_AUTO_TEST_CASE ( EscapedInsideMathExpression )

Definition at line 110 of file test_expand_text_vars.cpp.

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

◆ BOOST_AUTO_TEST_CASE() [9/28]

BOOST_AUTO_TEST_CASE ( EscapedInsideVariableReference )

Definition at line 129 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [10/28]

BOOST_AUTO_TEST_CASE ( EscapedThenRegularVariable )

Definition at line 91 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [11/28]

BOOST_AUTO_TEST_CASE ( EscapedVariable )

Definition at line 83 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [12/28]

BOOST_AUTO_TEST_CASE ( ExpandsNestedReferences )

◆ BOOST_AUTO_TEST_CASE() [13/28]

BOOST_AUTO_TEST_CASE ( ForwardSlashBeforeVariableExpands )

Definition at line 204 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [14/28]

BOOST_AUTO_TEST_CASE ( ForwardSlashPathUnchanged )

◆ BOOST_AUTO_TEST_CASE() [15/28]

BOOST_AUTO_TEST_CASE ( IsVersionedEnvVarPredicate )

Definition at line 715 of file test_expand_text_vars.cpp.

References ENV_VAR::IsVersionedEnvVar().

◆ BOOST_AUTO_TEST_CASE() [16/28]

BOOST_AUTO_TEST_CASE ( LegacyVersionedVarStillResolvesToCurrentDir )

◆ BOOST_AUTO_TEST_CASE() [17/28]

BOOST_AUTO_TEST_CASE ( MultipleEscapedInMathExpression )

◆ BOOST_AUTO_TEST_CASE() [18/28]

BOOST_AUTO_TEST_CASE ( MultipleVariables )

Definition at line 76 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [19/28]

BOOST_AUTO_TEST_CASE ( MultipleVarsAfterBackslashSeparators )

◆ BOOST_AUTO_TEST_CASE() [20/28]

BOOST_AUTO_TEST_CASE ( NonVariableBackslashesArePreserved )

Definition at line 252 of file test_expand_text_vars.cpp.

References NormalizeFilePathForTextVars(), and path.

◆ BOOST_AUTO_TEST_CASE() [21/28]

BOOST_AUTO_TEST_CASE ( NormalizePicksLongestPrefix )

◆ BOOST_AUTO_TEST_CASE() [22/28]

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 443 of file test_expand_text_vars.cpp.

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

◆ BOOST_AUTO_TEST_CASE() [23/28]

BOOST_AUTO_TEST_CASE ( RegularThenEscapedVariable )

Definition at line 100 of file test_expand_text_vars.cpp.

References ExpandTextVars(), resolver, and result.

◆ BOOST_AUTO_TEST_CASE() [24/28]

BOOST_AUTO_TEST_CASE ( RoundTripPreservesAbsolutePath )

◆ BOOST_AUTO_TEST_CASE() [25/28]

BOOST_AUTO_TEST_CASE ( SimpleVariable )

Definition at line 69 of file test_expand_text_vars.cpp.

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

◆ BOOST_AUTO_TEST_CASE() [26/28]

BOOST_AUTO_TEST_CASE ( TextVarNotFirstInFilename )

◆ BOOST_AUTO_TEST_CASE() [27/28]

BOOST_AUTO_TEST_CASE ( UndefinedReferenceLeavesLiteralMarker )

Definition at line 577 of file test_expand_text_vars.cpp.

References BOOST_REQUIRE(), and ExpandEnvVarSubstitutions().

◆ BOOST_AUTO_TEST_CASE() [28/28]

BOOST_AUTO_TEST_CASE ( UserVarIsNotTreatedAsVersionedLibraryDir )