Browse Source
Newly added &{label/path} feature doesn't yet have any tests. Add some. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>main
Ahmad Fatoum
4 years ago
committed by
David Gibson
7 changed files with 112 additions and 2 deletions
@ -0,0 +1,51 @@ |
|||||||
|
// SPDX-License-Identifier: LGPL-2.1-or-later |
||||||
|
/* |
||||||
|
* libfdt - Flat Device Tree manipulation |
||||||
|
* Testcase for label relative child references in dtc |
||||||
|
* Copyright (C) 2006 David Gibson, IBM Corporation. |
||||||
|
* Copyright (C) 2020 Ahmad Fatoum, Pengutronix. |
||||||
|
*/ |
||||||
|
#include <stdlib.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
#include <stdint.h> |
||||||
|
|
||||||
|
#include <libfdt.h> |
||||||
|
|
||||||
|
#include "tests.h" |
||||||
|
#include "testdata.h" |
||||||
|
|
||||||
|
static void check_exist(void *fdt, const char *path) |
||||||
|
{ |
||||||
|
int sn = fdt_path_offset(fdt, path); |
||||||
|
if (sn < 0) |
||||||
|
FAIL("%s expected but not found: %s", path, fdt_strerror(sn)); |
||||||
|
} |
||||||
|
|
||||||
|
static void check_doesnt_exist(void *fdt, const char *path) |
||||||
|
{ |
||||||
|
int sn = fdt_path_offset(fdt, path); |
||||||
|
if (sn >= 0) |
||||||
|
FAIL("%s found but not expected %d", path, sn); |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char *argv[]) |
||||||
|
{ |
||||||
|
void *fdt; |
||||||
|
|
||||||
|
test_init(argc, argv); |
||||||
|
fdt = load_blob_arg(argc, argv); |
||||||
|
|
||||||
|
check_exist(fdt, "/node/subnode1"); |
||||||
|
check_exist(fdt, "/node/keep-me"); |
||||||
|
check_doesnt_exist(fdt, "/node/remove-me"); |
||||||
|
|
||||||
|
check_doesnt_exist(fdt, "/node2"); |
||||||
|
check_doesnt_exist(fdt, "/node/subnode3"); |
||||||
|
|
||||||
|
check_exist(fdt, "/node/subnode4"); |
||||||
|
|
||||||
|
check_exist(fdt, "/node/subnode1/add-me"); |
||||||
|
|
||||||
|
PASS(); |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
/dts-v1/; |
||||||
|
|
||||||
|
/ { |
||||||
|
node_label: node { |
||||||
|
keep-me {}; |
||||||
|
remove-me {}; |
||||||
|
|
||||||
|
subnode1 { |
||||||
|
property-inline1; |
||||||
|
property-inline2; |
||||||
|
property-inline3; |
||||||
|
}; |
||||||
|
|
||||||
|
subnode2 { |
||||||
|
property-inline1; |
||||||
|
}; |
||||||
|
|
||||||
|
subnode3 { |
||||||
|
property-inline1; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
node2_label: node2 { |
||||||
|
property-inline1; |
||||||
|
}; |
||||||
|
}; |
||||||
|
/omit-if-no-ref/ &{node_label/subnode1}; |
||||||
|
/omit-if-no-ref/ &node2_label; |
||||||
|
/delete-node/ &{node_label/subnode3}; |
||||||
|
|
||||||
|
&{node_label/} { |
||||||
|
/delete-node/ remove-me; |
||||||
|
|
||||||
|
subnode4 { }; |
||||||
|
}; |
||||||
|
|
||||||
|
label: &{node_label/subnode1} { |
||||||
|
selfref = &{node_label/subnode1}; |
||||||
|
add-me { }; |
||||||
|
}; |
Loading…
Reference in new issue