code: def test_raw_empty():
      whitespace_in = "  \n\n\r\r\v\v\t\t   \t   \r\r   \n\n"
  
      #   We tell the testing system to read its child process output as raw
      # binary data but the bjam process we run will read its input file and
      # write out its output as text, i.e. convert all of our "\r\n" sequences to
      # "\n" on input and all of its "\n" characters back to "\r\n" on output.
      # This means that any lone "\n" input characters not preceded by "\r" will
      # get an extra "\r" added in front of it on output.
      whitespace_out = whitespace_in.replace("\r\n", "\n").replace(
          "\n", "\r\n"
      )
  
      t = BoostBuild.Tester(
          ["-d2", "-d+4"], pass_toolset=0, use_test_config=False
      )
      t.write(
          "file.jam",
          """\
  actions do_empty {%s}
  JAMSHELL = %% ;
  do_empty all ;
  """
          % (whitespace_in),
      )
      t.run_build_system(["-ffile.jam"], universal_newlines=False)
      t.expect_output_lines("do_empty all")
      t.expect_output_lines("Executing raw command directly", False)
      if "\r\n%s\r\n" % whitespace_out not in t.stdout():
          BoostBuild.annotation(
              "failure",
              "Whitespace action content not found " "on stdout.",
          )
          t.fail_test(1, dump_difference=False)
      t.cleanup()
  
imports: import BoostBuild
  import os
  import re
  import sys
label_desc: Use image node_id 2 for calling a global function with example usage: test_raw_empty() without return types