|
@@ -0,0 +1,98 @@
|
|
|
+import os
|
|
|
+
|
|
|
+import infra.basetest
|
|
|
+
|
|
|
+
|
|
|
+class TestEd(infra.basetest.BRTest):
|
|
|
+ config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
|
|
|
+ """
|
|
|
+ BR2_PACKAGE_ED=y
|
|
|
+ BR2_TARGET_ROOTFS_CPIO=y
|
|
|
+ # BR2_TARGET_ROOTFS_TAR is not set
|
|
|
+ """
|
|
|
+
|
|
|
+ def run_ed_cmds(self, ed_cmds):
|
|
|
+ cmd = "ed <<EOF\n"
|
|
|
+ cmd += "\n".join(ed_cmds)
|
|
|
+ cmd += "\nEOF"
|
|
|
+ self.assertRunOk(cmd)
|
|
|
+
|
|
|
+ def test_run(self):
|
|
|
+ cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
|
|
|
+ self.emulator.boot(arch="armv5",
|
|
|
+ kernel="builtin",
|
|
|
+ options=["-initrd", cpio_file])
|
|
|
+ self.emulator.login()
|
|
|
+
|
|
|
+ # We check the program can run. This also check we have the
|
|
|
+ # actual GNU ed, rather than the Busybox ed, which does not
|
|
|
+ # recognize the --version option.
|
|
|
+ self.assertRunOk("ed --version")
|
|
|
+
|
|
|
+ test_fname = "test.txt"
|
|
|
+ input_text_lines = [
|
|
|
+ "Hello World",
|
|
|
+ "Embedded Linux is Hard."
|
|
|
+ ]
|
|
|
+ output_expected_text = [
|
|
|
+ "Hello Buildroot",
|
|
|
+ "---------------",
|
|
|
+ "Making Embedded Linux Easy."
|
|
|
+ ]
|
|
|
+
|
|
|
+ # We define few "ed" command sequences, creating and editing a
|
|
|
+ # text file. The final output of this sequence is expected to
|
|
|
+ # match the expected text previously defined.
|
|
|
+ create_file = ["a"]
|
|
|
+ create_file += input_text_lines
|
|
|
+ create_file += [
|
|
|
+ ".",
|
|
|
+ f"w {test_fname}",
|
|
|
+ "q"
|
|
|
+ ]
|
|
|
+
|
|
|
+ edit_file = [
|
|
|
+ f"r {test_fname}",
|
|
|
+ "1",
|
|
|
+ "s/World/Buildroot/",
|
|
|
+ "2",
|
|
|
+ "s/is Hard/Easy/",
|
|
|
+ "s/^/Making /",
|
|
|
+ "w",
|
|
|
+ "q"
|
|
|
+ ]
|
|
|
+
|
|
|
+ insert_txt = [
|
|
|
+ f"r {test_fname}",
|
|
|
+ "2",
|
|
|
+ "i",
|
|
|
+ "This is a new line",
|
|
|
+ ".",
|
|
|
+ "w",
|
|
|
+ "q"
|
|
|
+ ]
|
|
|
+
|
|
|
+ change_txt = [
|
|
|
+ f"r {test_fname}",
|
|
|
+ "2",
|
|
|
+ "c",
|
|
|
+ "---------------",
|
|
|
+ ".",
|
|
|
+ "w"
|
|
|
+ "q"
|
|
|
+ ]
|
|
|
+
|
|
|
+ # We execute all "ed" command batches.
|
|
|
+ ed_cmd_batches = [
|
|
|
+ create_file,
|
|
|
+ edit_file,
|
|
|
+ insert_txt,
|
|
|
+ change_txt
|
|
|
+ ]
|
|
|
+ for ed_cmd_batch in ed_cmd_batches:
|
|
|
+ self.run_ed_cmds(ed_cmd_batch)
|
|
|
+
|
|
|
+ # The final test file should contain the expected text.
|
|
|
+ out, ret = self.emulator.run(f"cat {test_fname}")
|
|
|
+ self.assertEqual(ret, 0)
|
|
|
+ self.assertEqual(out, output_expected_text)
|