Lines Matching +full:foo +full:- +full:names
2 # SPDX-License-Identifier: BSD-3-Clause
23 # - to stop on the first failure with shorter traceback output,
24 # use '-x --tb=native'
25 # - to drop into a debugger on failure, use '--pdb'
26 # - to run a particular test function or functions, use
27 # '-k test_function_pattern_goes_here'
34 fd, path = tempfile.mkstemp(prefix='pytest-', suffix='.dts')
36 os.write(fd, dts.encode('utf-8'))
44 representation is expected[1:-1].
52 expected = expected[1:-1]
53 assert actual == expected, f'unexpected round-trip on {dts}'
104 - err: error message must be exactly this
105 - err_endswith: error message must end with this
106 - err_matches: error message must match this regular expression
125 # Regression test that verifies node names are not matched against
126 # the more permissive set of rules used for property names.
129 /dts-v1/;
138 /dts-v1/;
148 h = /bits/ 8 < 0x10 0x20 (-1) >;
149 i = /bits/ 16 < 0x10 0x20 (-1) >;
150 j = /bits/ 32 < 0x10 0x20 (-1) >;
151 k = /bits/ 64 < 0x10 0x20 (-1) >;
156 /dts-v1/;
175 /dts-v1/;
184 /dts-v1/;
193 /dts-v1/;
205 /dts-v1/;
214 /dts-v1/;
224 /dts-v1/;
230 ":4 (column 10): parse error: expected two-digit byte or ']'")
236 /dts-v1/;
245 /dts-v1/;
255 /dts-v1/;
267 /dts-v1/;
275 /dts-v1/;
284 /dts-v1/;
294 /dts-v1/;
303 /dts-v1/;
320 /dts-v1/;
329 /dts-v1/;
339 /dts-v1/;
346 /dts-v1/;
355 /dts-v1/;
370 /dts-v1/;
373 l1: l2: l1: foo {
392 &{/foo} {
396 &{/foo/bar} {
409 /dts-v1/;
413 l1: l2: l3: foo {
430 /dts-v1/;
441 /dts-v1/;
446 &{foo} {
449 ":6 (column 1): parse error: node path 'foo' does not start with '/'")
452 /dts-v1/;
457 &{/foo} {
460 ":6 (column 1): parse error: component 'foo' in path '/foo' does not exist")
470 /dts-v1/;
486 /dts-v1/;
517 /dts-v1/;
530 /dts-v1/;
553 '''Node unit addresses must be correctly extracted from their names.'''
561 /dts-v1/;
564 no-unit-addr {
567 unit-addr@ABC {
570 unit-addr-non-numeric@foo-bar {
575 /dts-v1/;
578 no-unit-addr {
580 unit-addr@ABC {
582 unit-addr-non-numeric@foo-bar {
587 verify_unit_addr("/no-unit-addr", "")
588 verify_unit_addr("/unit-addr@ABC", "ABC")
589 verify_unit_addr("/unit-addr-non-numeric@foo-bar", "foo-bar")
595 /dts-v1/;
609 /dts-v1/;
624 /dts-v1/;
635 /dts-v1/;
649 /dts-v1/;
674 /dts-v1/;
699 /dts-v1/;
707 foo: phandle = < &{/a} >;
716 /dts-v1/;
723 foo: phandle = < &{/a} >;
732 /dts-v1/;
743 /dts-v1/;
751 ":5 (column 19): parse error: phandle references are only allowed in arrays with 32-bit elements")
754 /dts-v1/;
757 foo {
762 "/foo: bad phandle length (1), expected 4 bytes")
765 /dts-v1/;
768 foo {
773 "/foo: bad value 0x00000000 for phandle")
776 /dts-v1/;
779 foo {
780 phandle = < (-1) >;
784 "/foo: bad value 0xffffffff for phandle")
787 /dts-v1/;
790 foo {
799 "/bar: duplicated phandle 0x11 (seen before at /foo)")
802 /dts-v1/;
805 foo {
813 "/foo: phandle refers to another node")
826 /dts-v1/;
852 /dts-v1/;
867 /dts-v1/;
883 /dts-v1/;
888 /delete-property/ missing;
889 /delete-property/ delete;
896 /delete-property/ y;
900 /dts-v1/;
912 /dts-v1/;
915 x = "foo";
921 /delete-node/ &{/};
929 /delete-node/ sub2;
941 /delete-node/ &sub3;
942 /delete-node/ &{/sub4};
945 /dts-v1/;
955 /dts-v1/;
968 /delete-node/ &{/};
971 /dts-v1/;
978 /dts-v1/;
983 /delete-node/ &missing;
988 /dts-v1/;
990 /delete-node/ {
992 ":3 (column 15): parse error: expected label (&foo) or path (&{/foo/bar}) reference")
999 with open("same-dir-1", "w") as f:
1002 /include/ "same-dir-2"
1004 with open("same-dir-2", "w") as f:
1007 /include/ "same-dir-3"
1009 with open("same-dir-3", "w") as f:
1015 /dts-v1/;
1018 /include/ "same-dir-1"
1023 /dts-v1/;
1030 """[1:-1]
1039 /dts-v1/;
1047 subdir_1 = tmp_path / "subdir-1"
1049 with open(subdir_1 / "via-include-path-1", "w") as f:
1051 = /include/ "via-include-path-2"
1054 subdir_2 = tmp_path / "subdir-2"
1056 with open(subdir_2 / "via-include-path-2", "w") as f:
1066 y /include/ "via-include-path-1"
1072 /dts-v1/;
1078 """[1:-1]
1107 "expected '/dts-v1/;' at start of file"):
1123 tmp.dts:1 ->
1124 tmp2.dts:1 ->
1125 tmp3.dts:1 ->
1134 tmp.dts:1 ->
1140 '''The /omit-if-no-ref/ marker is a bit of undocumented
1148 /dts-v1/;
1153 /omit-if-no-ref/ referenced {
1159 /omit-if-no-ref/ unreferenced {
1162 l1: /omit-if-no-ref/ unreferenced2 {
1165 /omit-if-no-ref/ l2: unreferenced3 {
1175 /omit-if-no-ref/ &referenced2;
1176 /omit-if-no-ref/ &unreferenced4;
1177 /omit-if-no-ref/ &{/unreferenced5};
1180 /dts-v1/;
1193 /dts-v1/;
1196 /omit-if-no-ref/ x = "";
1199 ":4 (column 21): parse error: /omit-if-no-ref/ can only be used on nodes")
1202 /dts-v1/;
1205 /omit-if-no-ref/ x;
1208 ":4 (column 20): parse error: /omit-if-no-ref/ can only be used on nodes")
1211 /dts-v1/;
1214 /omit-if-no-ref/ {
1221 /dts-v1/;
1224 /omit-if-no-ref/ = < 0 >;
1230 /dts-v1/;
1235 /omit-if-no-ref/ &missing;
1240 /dts-v1/;
1242 /omit-if-no-ref/ {
1244 ":3 (column 18): parse error: expected label (&foo) or path (&{/foo/bar}) reference")
1250 /dts-v1/;
1287 sub = < (7 - 4) >;
1291 unary_minus = < (-3) >;
1293 not0 = < (!-1) >;
1297 nest = < (((--3) + (-2)) * (--(-2))) >;
1302 /dts-v1/;
1355 /dts-v1/;
1358 a = < (1/(-1 + 1)) >;
1364 /dts-v1/;
1373 '''Comments should be removed when round-tripped to a str.'''
1376 /**//dts-v1//**/;//
1378 // foo
1379 / /**/{// foo
1381 foo
1385 /dts-v1/;
1412 /dts-v1/;
1415 foo {
1428 verify_path_is("/foo", "foo", dt)
1429 verify_path_is("//foo", "foo", dt)
1430 verify_path_is("///foo", "foo", dt)
1431 verify_path_is("/foo/bar", "bar", dt)
1432 verify_path_is("//foo//bar", "bar", dt)
1433 verify_path_is("///foo///bar", "bar", dt)
1438 "no alias '' found -- did you forget the leading '/' in the node path?",
1442 "no alias 'missing' found -- did you forget the leading '/' in the node path?",
1449 "/foo/missing",
1450 "component 'missing' in path '/foo/missing' does not exist",
1460 verify_path_exists("/foo")
1461 verify_path_exists("/foo/bar")
1464 verify_path_missing("/foo/missing")
1470 /dts-v1/;
1514 /dts-v1/;
1523 re.escape("to be assigned with either 'a = &foo' or 'a = \"/path/to/node\"', not 'a = [ 00 ];'"))
1526 /dts-v1/;
1535 ".* is not valid UTF-8")
1538 /dts-v1/;
1546 "/aliases: alias property name 'A' should include only characters from [0-9a-z-]")
1549 /dts-v1/;
1557 "property 'a' on /aliases in .* points to the non-existent node \"/missing\"")
1567 /dts-v1/;
1574 bytes4 = foo: [ 01 bar: 02 ];
1581 string = "foo";
1582 strings = "foo", "bar";
1589 phandle-and-nums-1 = < &node 1 >;
1590 phandle-and-nums-2 = < &node 1 2 &node 3 4 >;
1591 phandle-and-nums-3 = < &node 1 2 >, < &node 3 4 >;
1593 compound2 = "foo", < >;
1617 verify_type("phandle-and-nums-1", dtlib.Type.PHANDLES_AND_NUMS)
1618 verify_type("phandle-and-nums-2", dtlib.Type.PHANDLES_AND_NUMS)
1619 verify_type("phandle-and-nums-3", dtlib.Type.PHANDLES_AND_NUMS)
1629 /dts-v1/;
1645 string = "foo\tbar baz";
1647 strings = "foo", "bar", "baz";
1648 invalid_strings = "foo", "\xff", "bar";
1680 verify_to_num("s", True, -1)
1701 re.escape("'string = < (number) >;', not 'string = \"foo\\tbar baz\";'"))
1720 verify_to_nums("two_s", True, [-1, -2])
1732 re.escape("not 'string = \"foo\\tbar baz\";'"))
1768 verify_to_string("string", "foo\tbar baz")
1778 re.escape("not 'strings = \"foo\", \"bar\", \"baz\";'"))
1782 "in .* is not valid UTF-8")
1795 verify_to_strings("string", ["foo\tbar baz"])
1796 verify_to_strings("strings", ["foo", "bar", "baz"])
1805 re.escape(r"(b'foo\x00\xff\x00bar\x00') on / in ") +
1806 ".* is not valid UTF-8")
1823 re.escape("'u = < &foo >;', not 'u = < 0x1 >;'"))
1827 re.escape("'string = < &foo >;', not 'string = \"foo\\tbar baz\";'"))
1847 re.escape("'u = < &foo &bar ... >;', not 'u = < 0x1 >;'"))
1851 re.escape("'string = < &foo &bar ... >;', ") +
1852 re.escape("not 'string = \"foo\\tbar baz\";'"))
1870 re.escape("'u = &foo' or 'u = \"/path/to/node\"', not 'u = < 0x1 >;'"))
1873 "property 'missingpath' on / in .* points to the non-existent node "
1876 # Test top-level to_num() and to_nums()
1895 verify_raw_to_num(dtlib.to_num, "s", None, True, -1)
1899 verify_raw_to_num(dtlib.to_nums, "two_s", 4, True, [-1, -2])
1903 verify_raw_to_num_error(dtlib.to_num, b"foo", 2, "b'foo' is 3 bytes long, expected 2")
1915 /dts-v1/;
1919 label: foo {
1929 "Label 'label' appears on /sub1/foo and on /sub2/bar")
1932 /dts-v1/;
1936 label: foo {
1947 "Label 'label' appears on /sub/bar and on /sub/foo")
1950 /dts-v1/;
1953 foo: a = < 0 >;
1954 foo: node {
1958 "Label 'foo' appears on /node and on property 'a' of node /")
1961 /dts-v1/;
1964 foo: a = < 0 >;
1966 foo: b = < 0 >;
1970 "Label 'foo' appears on property 'a' of node / and on property 'b' of node /node")
1973 /dts-v1/;
1976 foo: a = foo: < 0 >;
1979 "Label 'foo' appears in the value of property 'a' of node / and on property 'a' of node /")
1983 /dts-v1/;
1987 label: foo {
1994 label: foo {
2000 /dts-v1/;
2004 label: foo {
2012 /dts-v1/;
2015 label: foo {
2021 /delete-node/ &{/bar};
2024 /dts-v1/;
2027 label: foo {
2037 /dts-v1/;
2040 x = &foo, < &foo >;
2041 y = &foo, < &foo >;
2042 foo: foo {
2048 /delete-property/ y;
2052 /dts-v1/;
2056 foo: foo {
2062 # Test self-referential node
2066 /dts-v1/;
2069 label: foo {
2070 x = &{/foo}, &label, < &label >;
2075 /dts-v1/;
2078 label: foo {
2079 x = &{/foo}, &label, < &label >;
2090 /dts-v1/;
2099 /dts-v1/;
2112 /dts-v1/;
2114 foo: / {
2123 /dts-v1/;
2133 dt = parse(dts, include_path=("foo", "bar"))
2135 assert re.fullmatch(r"DT\(filename='.*', include_path=.'foo', 'bar'.\)",
2142 dt = parse(dts, include_path=iter(("foo", "bar")))
2144 assert re.fullmatch(r"DT\(filename='.*', include_path=.'foo', 'bar'.\)",
2148 '''Tests for node/property names.'''
2151 /dts-v1/;
2154 // A leading \ is accepted but ignored in node/propert names
2155 \aA0,._+*#?- = &_, &{/aA0,._+@-};
2157 // Names that overlap with operators and integer literals
2161 - = [ 01 ];
2166 // Node names are more restrictive than property names.
2167 _: \aA0,._+@- {
2175 /dts-v1/;
2178 aA0,._+*#?- = &_, &{/aA0,._+@-};
2181 - = [ 01 ];
2185 _: aA0,._+@- {
2193 /dts-v1/;
2196 foo@3;
2199 ":4 (column 7): parse error: '@' is only allowed in node names")
2202 /dts-v1/;
2205 foo@3 = < 0 >;
2208 ":4 (column 8): parse error: '@' is only allowed in node names")
2211 /dts-v1/;
2214 foo@2@3 {
2222 Test that a densely written DTS input round-trips to something
2227 /dts-v1/;/{l1:l2:foo{l3:l4:bar{l5:x=l6:/bits/8<l7:1 l8:2>l9:,[03],"a";};};};
2230 /dts-v1/;
2233 l1: l2: foo {
2242 '''Test miscellaneous errors and non-errors.'''
2244 verify_error_endswith("", ":1 (column 1): parse error: expected '/dts-v1/;' at start of file")
2247 /dts-v1/;
2252 /dts-v1/; /plugin/;
2257 /dts-v1/;
2260 foo: foo {
2265 l1: l2: &foo {
2268 ":9 (column 5): parse error: expected label reference (&foo)")
2271 /dts-v1/;
2274 foo: {};
2279 # Multiple /dts-v1/ at the start of a file is fine
2281 /dts-v1/;
2282 /dts-v1/;
2288 /dts-v1/;
2296 /dts-v1/;
2299 aliases { foo = "/missing"; };
2302 assert dt.get_node('/aliases').props['foo'].to_string() == '/missing'
2305 # Duplicate node names in the same {} block are an error in dtc,
2310 /dts-v1/;
2313 foo {};
2314 foo {};
2316 """, "/foo: duplicate node name")
2319 /dts-v1/;
2322 foo { prop = <3>; };
2325 foo { prop = <4>; };
2329 /dts-v1/;
2332 foo {
2340 /dts-v1/;
2346 foo = &nodelabel;
2352 ref-to-node = <&nodelabel>;
2435 assert list(dt_copy.alias2node.keys()) == ['foo']
2436 assert dt_copy.alias2node['foo'] is node_copy
2453 /dts-v1/;
2457 parent-alias = &parent_label;
2464 foo = "bar";
2478 assert dt.get_node('parent-alias') is parent
2484 assert 'foo' in dt.get_node('/chosen').props
2499 with dtlib_raises("can't move '/newpath' to '/foo/bar': "
2500 "parent node '/foo' doesn't exist"):
2501 dt.move_node(parent, '/foo/bar')
2511 node1: test-node1 {
2519 f.write('''/dts-v1/;
2524 node2: test-node2 {
2537 test_node2 = dt.get_node('/test-node2')
2548 test_node1 = dt.get_node('/test-node1')