/*
 * Copyright (c) 2016 NextThing Co
 * Copyright (c) 2016 Free Electrons
 * Copyright (c) 2016 Konsulko Inc.
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

/dts-v1/;
/plugin/;

/ {
	/* Test that we can change an int by another */
	fragment@0 {
		target = <&test>;

		__overlay__ {
			test-int-property = <43>;
		};
	};

	/* Test that we can replace a string by a longer one */
	fragment@1 {
		target = <&test>;

		__overlay__ {
			test-str-property = "foobar";
		};
	};

	/* Test that we add a new property */
	fragment@2 {
		target = <&test>;

		__overlay__ {
			test-str-property-2 = "foobar2";
		};
	};

	/* Test that we add a new node (by phandle) */
	fragment@3 {
		target = <&test>;

		__overlay__ {
			new-node {
				new-property;
			};
		};
	};

	fragment@5 {
		target = <&test>;

		__overlay__ {
			local: new-local-node {
				new-property;
			};
		};
	};

	fragment@6 {
		target = <&test>;

		__overlay__ {
			test-phandle = <&test>, <&local>;
		};
	};

	fragment@7 {
		target = <&test>;

		__overlay__ {
			test-several-phandle = <&local>, <&local>;
		};
	};

	fragment@8 {
		target = <&test>;

		__overlay__ {
			sub-test-node {
				new-sub-test-property;
			};
		};
	};
};
