mirror of
https://github.com/github/codeql.git
synced 2026-05-14 11:19:27 +02:00
These tests consist of various Python constructions (hopefully a somewhat comprehensive set) with specific timestamp annotations scattered throughout. When the tests are run using the Python 3 interpreter, these annotations are checked and compared to the "current timestamp" to see that they are in agreement. This is what makes the tests "self-validating". There are a few different kinds of annotations: the basic `t[4]` style (meaning this is executed at timestamp 4), the `t[dead(4)]` variant (meaning this _would_ happen at timestamp 4, but it is in a dead branch), and `t[never]` (meaning this is never executed at all). In addition to this, there is a query, MissingAnnotations, which checks whether we have applied these annotations maximally. Many expression nodes are not actually annotatable, so there is a sizeable list of excluded nodes for that query.
35 lines
620 B
Python
35 lines
620 B
Python
"""F-string evaluation order."""
|
|
|
|
from timer import test
|
|
|
|
|
|
@test
|
|
def test_simple_fstring(t):
|
|
name = "world" @ t[0]
|
|
s = f"hello {name @ t[1]}" @ t[2]
|
|
|
|
|
|
@test
|
|
def test_multi_expr_fstring(t):
|
|
a = "hello" @ t[0]
|
|
b = "world" @ t[1]
|
|
s = f"{a @ t[2]} {b @ t[3]}" @ t[4]
|
|
|
|
|
|
@test
|
|
def test_nested_fstring(t):
|
|
inner = "world" @ t[0]
|
|
s = f"hello {f'dear {inner @ t[1]}' @ t[2]}" @ t[3]
|
|
|
|
|
|
@test
|
|
def test_format_spec(t):
|
|
x = 3.14159 @ t[0]
|
|
s = f"{x @ t[1]:.2f}" @ t[2]
|
|
|
|
|
|
@test
|
|
def test_method_in_fstring(t):
|
|
name = "world" @ t[0]
|
|
s = f"hello {((name @ t[1]).upper @ t[2])() @ t[3]}" @ t[4]
|