def testPagerOverQuit(self):
     self.SetRawKeys(['q'])
     contents = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'
     expected = '1\n2\n3\n4\n5\n6\n7\n8\n9\n%s' % self.Prompt(81)
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
 def testPagerOnePagePlusTwoLinesBoundaryBangerViaFunctionKeys(self):
     self.SetRawKeys([
         '<PAGE-DOWN>', '<PAGE-DOWN>', '<DOWN-ARROW>', '<DOWN-ARROW>',
         '<DOWN-ARROW>', '<UP-ARROW>', '<UP-ARROW>', '<UP-ARROW>',
         '<PAGE-UP>', '<PAGE-DOWN>', '<PAGE-DOWN>', None
     ])
     contents = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'
     expected = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '10\n11\n%s'
                 '%s'
                 '%s'
                 '%s'
                 '%s'
                 '2\n3\n4\n5\n6\n7\n8\n9\n10\n%s'
                 '1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '%s'
                 '%s'
                 '10\n11\n%s'
                 '%s') % (
                     self.Prompt(81), self.Prompt(100), self.Prompt(100),
                     self.Prompt(100), self.Prompt(100), self.Prompt(100),
                     self.Prompt(90), self.Prompt(81), self.Prompt(81),
                     self.Prompt(81), self.Prompt(100), self.Prompt(100))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
 def testPagerUnderQuit(self):
     self.SetRawKeys(['q'])
     contents = '1\n2\n3\n4\n5\n'
     expected = contents
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual(['q'], self.raw_keys)
 def testPagerBadSearchPattern(self):
     self.SetRawKeys(['/', '*', '1', '\n', 'q'])
     contents = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'
     expected = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '/*1\r  \r%s') % (self.Prompt(81), self.Prompt(81))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
 def testPagerOverNextBoundaryQuit(self):
     self.SetRawKeys([' ', ' ', 'q'])
     contents = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'
     expected = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '10\n11\n%s'
                 '%s') % (self.Prompt(81), self.Prompt(100),
                          self.Prompt(100))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
 def testPagerOverHelpQuit(self):
     self.SetRawKeys(['h', 'X', 'q'])
     contents = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'
     expected = (
         '1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
         '%s\n'
         '1\n2\n3\n4\n5\n6\n7\n8\n9\n%s' %
         (self.Prompt(81), console_pager.Pager.HELP_TEXT, self.Prompt(81)))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
 def testPagerCountPosition(self):
     self.SetRawKeys(['1', '0', 'g', 'q'])
     contents = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'
     expected = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '%s'
                 '%s'
                 '10\n11\n'
                 '%s') % (self.Prompt(81), self.Prompt(81), self.Prompt(81),
                          self.Prompt(100))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
 def testPagerOnePagePlusTwoWithWidesLines(self):
     self.SetRawKeys(['f', 'f', 'k', 'k', 'k', 'k', 'q'])
     contents = ('A2345678901234567890abcdef\n'
                 'B2345678901234567890abcdef\n'
                 'C2345678901234567890abcdef\n'
                 'D2345678901234567890abcdef\n'
                 'E2345678901234567890abcdef\n'
                 'F2345678901234567890abcdef\n'
                 'G2345678901234567890abcdef\n'
                 'H2345678901234567890abcdef\n'
                 'I2345678901234567890abcdef\n')
     expected = ('A2345678901234567890\nabcdef\n'
                 'B2345678901234567890\nabcdef\n'
                 'C2345678901234567890\nabcdef\n'
                 'D2345678901234567890\nabcdef\n'
                 'E2345678901234567890\n'
                 '%s'
                 'abcdef\n'
                 'F2345678901234567890\nabcdef\n'
                 'G2345678901234567890\nabcdef\n'
                 'H2345678901234567890\nabcdef\n'
                 'I2345678901234567890\nabcdef\n'
                 '%s'
                 '%s'
                 'E2345678901234567890\nabcdef\n'
                 'F2345678901234567890\nabcdef\n'
                 'G2345678901234567890\nabcdef\n'
                 'H2345678901234567890\nabcdef\n'
                 'I2345678901234567890\n'
                 '%s'
                 'abcdef\n'
                 'E2345678901234567890\nabcdef\n'
                 'F2345678901234567890\nabcdef\n'
                 'G2345678901234567890\nabcdef\n'
                 'H2345678901234567890\nabcdef\n'
                 '%s'
                 'D2345678901234567890\nabcdef\n'
                 'E2345678901234567890\nabcdef\n'
                 'F2345678901234567890\nabcdef\n'
                 'G2345678901234567890\nabcdef\n'
                 'H2345678901234567890\n'
                 '%s'
                 'abcdef\n'
                 'D2345678901234567890\nabcdef\n'
                 'E2345678901234567890\nabcdef\n'
                 'F2345678901234567890\nabcdef\n'
                 'G2345678901234567890\nabcdef\n'
                 '%s') % (self.Prompt(50), self.Prompt(100),
                          self.Prompt(100), self.Prompt(94),
                          self.Prompt(88), self.Prompt(83), self.Prompt(77))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
Ejemplo n.º 9
0
def More(contents, out=None, prompt=None, check_pager=True):
    """Run a user specified pager or fall back to the internal pager.

  Args:
    contents: The entire contents of the text lines to page.
    out: The output stream, log.out (effectively) if None.
    prompt: The page break prompt.
    check_pager: Checks the PAGER env var and uses it if True.
  """
    if not IsInteractive(output=True):
        if not out:
            out = log.out
        out.write(contents)
        return
    if not out:
        # Rendered help to the log file.
        log.file_only_logger.info(contents)
        # Paging shenanigans to stdout.
        out = sys.stdout
    if check_pager:
        pager = encoding.GetEncodedValue(os.environ, 'PAGER', None)
        if pager == '-':
            # Use the fallback Pager.
            pager = None
        elif not pager:
            # Search for a pager that handles ANSI escapes.
            for command in ('less', 'pager'):
                if files.FindExecutableOnPath(command):
                    pager = command
                    break
        if pager:
            # If the pager is less(1) then instruct it to display raw ANSI escape
            # sequences to enable colors and font embellishments.
            less_orig = encoding.GetEncodedValue(os.environ, 'LESS', None)
            less = '-R' + (less_orig or '')
            encoding.SetEncodedValue(os.environ, 'LESS', less)
            p = subprocess.Popen(pager, stdin=subprocess.PIPE, shell=True)
            enc = console_attr.GetConsoleAttr().GetEncoding()
            p.communicate(input=contents.encode(enc))
            p.wait()
            if less_orig is None:
                encoding.SetEncodedValue(os.environ, 'LESS', None)
            return
    # Fall back to the internal pager.
    console_pager.Pager(contents, out, prompt).Run()
Ejemplo n.º 10
0
def More(contents, out=None, prompt=None, check_pager=True):
  """Run a user specified pager or fall back to the internal pager.

  Args:
    contents: The entire contents of the text lines to page.
    out: The output stream, log.out (effectively) if None.
    prompt: The page break prompt.
    check_pager: Checks the PAGER env var and uses it if True.
  """
  if not IsInteractive(output=True):
    if not out:
      out = log.out
    out.write(contents)
    return
  if not out:
    # Rendered help to the log file.
    log.file_only_logger.info(contents)
    # Paging shenanigans to stdout.
    out = sys.stdout
  if check_pager:
    pager = os.environ.get('PAGER', None)
    if pager == '-':
      # Use the fallback Pager.
      pager = None
    elif not pager:
      # Search for a pager that handles ANSI escapes.
      for command in ('less', 'pager'):
        if files.FindExecutableOnPath(command):
          pager = command
          break
    if pager:
      less = os.environ.get('LESS', None)
      if less is None:
        os.environ['LESS'] = '-R'
      p = subprocess.Popen(pager, stdin=subprocess.PIPE, shell=True)
      encoding = console_attr.GetConsoleAttr().GetEncoding()
      p.communicate(input=contents.encode(encoding))
      p.wait()
      if less is None:
        os.environ.pop('LESS')
      return
  # Fall back to the internal pager.
  console_pager.Pager(contents, out, prompt).Run()
Ejemplo n.º 11
0
 def testPagerThreePagesBackAndForthBoundary(self):
     self.SetRawKeys([' ', ' ', ' ', 'b', 'b', 'b', ' ', ' ', ' ', 'q'])
     contents = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n'
                 '11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n'
                 '21\n22\n23\n24\n25\n26\n27\n')
     expected = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '10\n11\n12\n13\n14\n15\n16\n17\n18\n%s'
                 '19\n20\n21\n22\n23\n24\n25\n26\n27\n%s'
                 '%s'
                 '10\n11\n12\n13\n14\n15\n16\n17\n18\n%s'
                 '1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '%s'
                 '10\n11\n12\n13\n14\n15\n16\n17\n18\n%s'
                 '19\n20\n21\n22\n23\n24\n25\n26\n27\n%s'
                 '%s') % (self.Prompt(33), self.Prompt(66),
                          self.Prompt(100), self.Prompt(100),
                          self.Prompt(66), self.Prompt(33), self.Prompt(33),
                          self.Prompt(66), self.Prompt(100),
                          self.Prompt(100))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
Ejemplo n.º 12
0
 def testPagerOnePagePlusTwoLinesBoundaryBanger(self):
     self.SetRawKeys(
         ['f', 'f', 'j', 'j', 'j', 'k', 'k', 'k', 'b', 'f', 'f', 'q'])
     contents = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'
     expected = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '10\n11\n%s'
                 '%s'
                 '%s'
                 '%s'
                 '%s'
                 '2\n3\n4\n5\n6\n7\n8\n9\n10\n%s'
                 '1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '%s'
                 '%s'
                 '10\n11\n%s'
                 '%s') % (
                     self.Prompt(81), self.Prompt(100), self.Prompt(100),
                     self.Prompt(100), self.Prompt(100), self.Prompt(100),
                     self.Prompt(90), self.Prompt(81), self.Prompt(81),
                     self.Prompt(81), self.Prompt(100), self.Prompt(100))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)
Ejemplo n.º 13
0
 def testPagerThreePagesForwardSearch(self):
     self.SetRawKeys([
         '/', '^', '.', '1', '\n', '/', '\n', 'n', 'n', 'N', 'N', 'N', 'q'
     ])
     contents = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n'
                 '11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n'
                 '21\n22\n23\n24\n25\n26\n27\n')
     expected = ('1\n2\n3\n4\n5\n6\n7\n8\n9\n%s'
                 '/^.1\r   \r'
                 '11\n12\n13\n14\n15\n16\n17\n18\n19\n%s'
                 '/\r\r'
                 '20\n21\n22\n23\n24\n25\n26\n27\n%s'
                 '%s'
                 '%s'
                 '11\n12\n13\n14\n15\n16\n17\n18\n19\n%s'
                 '%s'
                 '%s') % (self.Prompt(33), self.Prompt(70),
                          self.Prompt(100), self.Prompt(100),
                          self.Prompt(100), self.Prompt(70),
                          self.Prompt(70), self.Prompt(70))
     console_pager.Pager(contents).Run()
     self.AssertOutputEquals(expected)
     self.assertEqual([], self.raw_keys)