Парсинг C++ для генерации тупиков модульного теста

Эта конкретная библиотека работает особым образом (похоже, она делает много «волшебства» под капотом - вам следует взглянуть на исходный код здесь , более конкретно на папку рендерера внутри src) [115 ]

Сохранение холста в состоянии внутри массива (правильный способ реагирования на действия) будет проблемой, поскольку он сохраняет его как сложный объект со многими методами и т. Д. ... и мы не можем визуализировать объекты. . Эта библиотека не была написана с учетом React ...

Пример кода ниже представляет собой простую реализацию в React ...

Вот живая демонстрация: https://codesandbox.io/s/9y24vwn1py

import React, { Component } from 'react';
import html2canvas from 'html2canvas';

class App extends Component {
  constructor(props) {
    super(props);
    this.captureRef = React.createRef();
    this.displayRef = React.createRef();
  }

  getScreenshotHandler = () => {
    html2canvas(this.captureRef.current).then(canvas =>
      this.displayRef.current.appendChild(canvas),
    );
  };

  render() {
    return (
      

This enitre div will be captured and added to the screen

Your screenshots will be availbale below
); } } export default App;

РЕДАКТИРОВАТЬ: на основе комментария ниже приведен еще один обходной путь:

class App extends Component {
  constructor(props) {
    super(props);
    this.state = { canvasArray: [] };
    this.captureRef = React.createRef();
  }

  getScreenshotHandler = () => {
    html2canvas(this.captureRef.current).then(canvas =>
      this.setState({
        canvasArray: [canvas.toDataURL(), ...this.state.canvasArray],
      }),
    );
  };

  renderCanvas = () => {
    return this.state.canvasArray.map((canvas, i) => {
      return screenshot;
    });
  };

  render() {
    return (
      

This enitre div will be captured

Your screenshots will be availbale below:
{this.renderCanvas()}
); } }

Ссылка на демонстрационный ролик: https://codesandbox.io/s/1r213057vq

10
задан Paweł Hajdan 25 October 2008 в 09:16
поделиться

8 ответов

Можно хотеть исследовать http://os.inf.tu-dresden.de/vfiasco/related.html#parsing. Но парсинг C++ труден.

С другой стороны, возможно, ctags или что-то подобное может извлечь определения классов...

Можно также попытаться записать собственный простой (?) синтаксический анализатор для генерации тупиков класса от заголовочных файлов...

Я пытался дать Вам некоторые подсказки. Как Вы видите, проблема не легка. Но надо надеяться можно автоматизировать по крайней мере некоторую часть его.

5
ответ дан 3 December 2019 в 20:07
поделиться

http://clang.llvm.org/ выглядит многообещающим, но является неполным.

http://www.boost.org/doc/libs/1_36_0/libs/python/pyste/index.html использует GCCXML для генерации оберток для кода C++ для взаимодействия через интерфейс с Python. Это доказывает, что GCCXML использовался для подобного понятия.

2
ответ дан 3 December 2019 в 20:07
поделиться

Gcc XML используется в некоторых проектах, таких как автоматический FFI для языка Common LISP. Это набрасывается на G ++ компилятор для генерации XML представление источника. Оттуда, любой инструмент обработки XML мог помочь Вам достигнуть своей цели.

4
ответ дан 3 December 2019 в 20:07
поделиться

Если Вы находитесь на aplatform, которая использует КАРЛИКОВЫЙ формат отладки (главным образом UNIX), можно использовать libdwarf для парсинга отладочной информации и информации об извлечении обо всем (прототипы функции, определения классов, и т.д.). Намного более структурированный и легче проанализировать, чем C++.

2
ответ дан 3 December 2019 в 20:07
поделиться

doxygen может обычно анализировать достаточно C++ для создания документации для кода. Это также имеет выходную опцию XML.

1
ответ дан 3 December 2019 в 20:07
поделиться

Вы смотрели на Mockcpp, AMOP и mockpp? Вы видели, как они анализируют C++ - если ни один из них не соответствует Вашим потребностям.

1
ответ дан 3 December 2019 в 20:07
поделиться

Если Вы находитесь на платформе Windows, Вы могли бы хотеть взглянуть на проект Microsoft Phoenix. Это - новая платформа компилятора, которая позволяет Вам сцепиться в любой этап процесса компиляции.

0
ответ дан 3 December 2019 в 20:07
поделиться

Eclipse проект CDT предоставляет усовершенствованный синтаксический анализатор C++. Интерфейс довольно легок. Следующий фрагмент кода может дать достаточно подсказки.

ITranslationUnit tu = CoreModelUtil.findTranslationUnit (файл);
ICElement [] элементы = tu.getChildren ();

Структура IStructure = (IStructure) элемент;
IMethodDeclaration [] методы = structure.getMethods ();
Поле IField[] = structure.getFields ();

1
ответ дан 3 December 2019 в 20:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: