New parser and outputters #430

Closed
wants to merge 192 commits into
from

5 participants

@danni
Collaborator

So this branch has gotten pretty massive and I think it's time to start reviewing it.

It doesn't pass it's outputting tests because the output has changed, but it seems to functionally work now, expect for some issues with Failfast + the outputters.

Main changes:

  • complete rebuild of the parser using pyparsing
  • complete rebuild of the outputters using blessings
  • considerable refactoring of the core to use try/except/finally blocks
  • pre-compile regexes
  • improved unicode cleanliness
  • code cleanups to facilitate a move to Python 3
danni and others added some commits Jan 23, 2014
@danni danni Begin work on a new Gherkin parser using pyparsing 6c3e43e
@danni danni Combine tags with their block 52a5619
@danni danni Add some basic block and statement parsing 1727f7e
@danni danni Support for parsing tables 3fa973d
@danni danni Add support for multiline strings in statements 055cbfe
@danni danni Parse feature descriptions
Suppress these for now, we can add them back in later.
f70c612
@danni danni The beginning of scenario parsing 84f0045
@danni danni Parse examples from scenario outlines 86243a0
@danni danni Use result names
Easier than trying to figure things out from position in the token
stream.
8013bf8
@danni danni Tie it all together to return Feature objects e315a3f
@danni danni Begin integrating the new parser into the existing unit tests b172c65
@danni danni Continue cleanups to make the tests pass 7d79d34
@danni danni Ignore comments 7777292
@danni danni Make tags strings rather than their own class 6284494
@danni danni Remove the HashList class 45c295a
@danni danni Only support Gherkin syntax a9ec830
@danni danni Support syntax errors
The format of syntax errors is different in the new parser, but that's
addressable.
a998c48
@danni danni Disable max_length tests
max_length is annoying to implement and I'm thinking of replacing it.
df5114e
@danni danni Disable language tests
These require reimplementing language support in the new parser.
429e439
@danni danni Support resolving step values and other things from the scenario tests 1a8356c
@danni danni Support multiple Examples: blocks 6077041
@danni danni Implement tag matching including fuzzy matching 6f13a3a
@danni danni Rewrite the step/statement grammar
Was too inflexible to things like line comments and comment characters
inside strings. This should be a lot more strict now.
5ea2781
@danni danni Set a backref to the scenario from the cloned step b143976
@danni danni Pass most step parsing tests
N.B. I've disabled a number of these tests because they test for
behaviours that I'm wondering if they're strictly cucumber/gherkin. Need
to have a discussion about them.
9f862c9
@danni danni Initial support for running features be269c8
@danni danni Overhaul the fundamentals of test running to try and clean it up
Failfast should work better now (needs tests) but it still needs some
work. I'm not entirely happy with how outlines work (for instance).
14b7623
@danni danni matches_tags should match any tag, not all tags 53ae027
@danni danni Get behave_as working. Pass more tests. 495de4a
Danielle Madeley Add pyparsing to requirements f280adc
@danni danni Remove unrequired method ab93dd7
@danni danni Handle behave_as() returning NoDefinition, it's a failure 5307491
@danni danni Get most unit tests passing (some remain to be reenabled) efd8343
@danni danni Remove dead code
This includes the representations support, which is going to be rebuilt.
4476d54
@danni danni Begin reintroducing language support 30c1b35
@danni danni Port language support to use Cucumber i18n.json f702bfa
@danni danni Fix French tests 63d5fca
@danni danni Reenable pt-br tests c325a8c
@danni danni Reenable Russian ab7c6af
@danni danni Fix Scenario Outline/Scenario again 227149c
@danni danni Update requirements.txt for Travis f68b8ce
@danni danni Fix the lookahead of keywords more robustly 149dc44
@danni danni Fix unicode handling of files 1868085
@danni danni Clean up hooks, make Backgrounds able to be failfasted 0c392a4
@danni danni Add test for broken table parsing b295bd3
@danni danni Add escape characters support to table cells 217a2a9
@danni danni Update test after hooks
after.each_step will not run for steps which are skipped (this is a
change from previously).
b9c5003
@danni danni Remove debugging f696b80
@danni danni Reallow * as a valid keyword for starting steps 3d97f36
@danni danni Reattach class methods to classes. Add common base class.
They don't need to be down the bottom any more.

Add a common base class so that we can specify where things are located
in a file.
40685ab
@danni danni Track where nodes are defined 146a287
@danni danni Initial work to replace the representations 865f956
@danni danni Remove a lot of dead code from lettuce.strings
Approximately 98% of this has been replaced by lettuce.parsing, or is
actually built into Python.
ac31952
@danni danni Reintroduce max_length property
Doesn't handle scenario outlines or descriptions yet.
50e6d6a
@danni danni Add a memoizedproperty decorator to cache expensive properties 2cf2de6
@danni danni Finish supporting max_length 11a3672
@danni danni Correctly determine location of description block da8f1bd
@danni danni Get string representations working a7a1573
Danielle Madeley Remove debugging prints from tests 2217186
@danni danni Fix uncoloured shell representation 01f302e
@danni danni More representation fixes 5806ad1
@danni danni Add blessings 4ea9d6d
@danni danni Begin work on a new coloured shell output module
Based on Blessings to make it much clearer how it works.

It's clear that the existing represented() methods are not really
sufficient for writing the coloured output (unless you like reprocessing
strings).
8e81336
@adaschevici adaschevici fixed behave as handling test 94efb4a
@danni danni Merge pull request #4 from adaschevici/behave-as-handling-test
fixed behave as handling test
d7a145b
@danni danni Refactor after/before callback registries to use factory
This has the advantage that the decorators actually exist and can be
detected with pylint.
c626979
@danni danni Some more coloured output 83d9f1b
@danni danni Show stderr in red, add counter for examples, unicode workaround a3f0de1
@danni danni Merge branch 'new-color-outputter' into new-parser a29e988
@danni danni Minor fixes 703195c
Danielle Madeley Fixes from running branch against real code ee6d3bb
@adaschevici adaschevici working on functional behave as test 140e48f
@adaschevici adaschevici fixed functional behave_as test bab09dc
@adaschevici adaschevici fixed functional behave_as test 7f2f3af
@adaschevici adaschevici corrected some spacing issues ff8a784
@adaschevici adaschevici changed also to and, it caused test to fail 46264ee
@adaschevici adaschevici fixed setup missing i18n cda34fb
@danni danni Merge pull request #6 from adaschevici/step-loader-test-fix
changed also to and, it caused test to fail
132e6c6
@danni danni Fix more tests
Disable more colour tests
15c1ee8
@adaschevici adaschevici removed unnecessary import dcd6937
@danni danni More small fixes/more disabling of colour tests 5622cfd
@danni danni Add ability to guess language 86868bb
@danni danni Fix unicode handling 2f6f241
@danni danni Unicode and language glitches
Some tests no longer run because we're now strict to i18n.json.
bb00c63
@danni danni Reintroduce the func to terminal the terminal width of strings fcd626c
@danni danni Reintroduce ljust
Needs some unit tests, the existing ones don't deal with interesting
cases like wide-characters.
0bf3591
@danni danni Fix wide characters in tables 5764322
@danni danni Merge remote-tracking branch 'origin/master' into new-parser 39f3827
@danni danni Access PYTHONPATH from test 408327a
@danni danni Fix support for languages where characters are words
Cucumber uses a < on the end of a keyword to mean the keyword might not
be followed by a space. Use this to create a pyparsing Literal rather
than a Keyword.
4d5dd84
@danni danni Fix more tests per now-formalised language requirements
Nicely this makes them highlight corrrectly in Vim.

Disable more coloured tests.
a43570d
@danni danni A new version of assert_equals 2e867e3
@danni danni Tests + cleanups for assert_equals
This version even supports coloured output! Should make debugging
easier :)
3f1d107
@danni danni Fix to ensure lines copy full length 3cdfe14
@danni danni Fix the new colour outputter breakdowns daad852
@danni danni Test fixes dbe0dc3
@danni danni Reintroduce list of failed scenarios 2288b41
@danni danni Provide proposed steps fc7a32e
@danni danni More outputter fixes f329873
@danni danni Remove extra space 2cdfe2d
@koterpillar koterpillar commented on the diff Feb 19, 2014
lettuce/parser.py
+
+ def represented(self, indent=0, annotate=True):
+ """
+ Return a representation of the node
+ """
+
+ s = u' ' * indent + self.text.strip()
+
+ if annotate:
+ s = strings.ljust(s, self.feature.max_length + 1) + \
+ u'# ' + unicode(self.described_at)
+
+ return s
+
+
+class Step(Node):
@koterpillar
koterpillar added a line comment Feb 19, 2014

What would happen if you turn the inheritance around and inherit these from their lettuce.core counterparts? This would allow you not to do any class hacks and still have the functionality split nicely.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
lettuce/core.py
- params = dict(
- tags=tags_scenario,
- )
+ # If no scenarios in this feature will run,
@koterpillar
koterpillar added a line comment Feb 19, 2014

Grammar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
lettuce/languages.py
+ def __repr__(self):
+ return '<Language "%s">' % self.code
+
+ @property
+ def name(self):
+ return self.__class__.__name__
+
+ def print_keywords(self):
+ print u'FEATURE', unicode(self.FEATURE)
+ print u'BACKGROUND', unicode(self.BACKGROUND)
+ print u'SCENARIO', unicode(self.SCENARIO)
+ print u'EXAMPLES', unicode(self.EXAMPLES)
+ print u'STATEMENT', unicode(self.STATEMENT)
+
+ @classmethod
+ def guess_from_string(cls, string):
@koterpillar
koterpillar added a line comment Feb 19, 2014

Not used, quite a mess inside.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
lettuce/languages.py
+with open(i18n) as i18n:
+ i18n = json.load(i18n)
+
+ for lang, defn in i18n.iteritems():
+ name = defn['name']
+
+ def generate_keywords(*args):
+ """
+ Generator yields a list of keywords from the definitions specified
+ in the arguments
+ """
+
+ for string in args:
+ for keyword in defn[string].split(u'|'):
+ if keyword.endswith(u'<'):
+ # this language has character words, and we should
@koterpillar
koterpillar added a line comment Feb 19, 2014

"has no word separators" might not be the linguistic term, but is correct.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
lettuce/plugins/colored_shell_output.py
+ def divert(self):
+ self.diverted = True
@koterpillar
koterpillar added a line comment Feb 19, 2014

No "Already diverted!" protection here?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
lettuce/strings.py
- return [unicode(i) for i in items]
+ return sum(widths.get(unicodedata.east_asian_width(c), 1) for c in string)
@koterpillar
koterpillar added a line comment Feb 19, 2014

Well, you opened a can of worms here.

>>> get_terminal_width(u'mañana')
7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
requirements.txt
Pygments==1.5
Sphinx==1.1.3
+Werkzeug==0.9.4
+-e git://github.com/erikrose/blessings@1a463ac86c7645315195ec012d3caf930ac3c10f#egg=blessings-master
@koterpillar
koterpillar added a line comment Feb 19, 2014

Not really cool in a paranoid and/or pip-cached environment. At least change to git+https, and have a bug to change back. Also, can you omit -e here?

@koterpillar
koterpillar added a line comment Feb 19, 2014

Oops, this is "dev requirements" so most of that doesn't apply. Although then will the right version be still installed by setup.py?

@danni
Collaborator
danni added a line comment Feb 19, 2014

Currently no, because 1.6 hasn't been released on pypi for some reason.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/unit/test_asserts.py
+
+
+def test_yield_transitions():
+ """
+ Test yield_transitions
+ """
+
+ assert_equals(list(asserts.yield_transitions("1111112222221111")),
+ [
+ (0, 6, '1'),
+ (6, 12, '2'),
+ (12, 16, '1'),
+ ])
+
+
+# def test_assert_equals_fails_as_expected():
@koterpillar
koterpillar added a line comment Feb 19, 2014

Commented-out block.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/asserts.py
+ try:
+ # replace \s with space, this makes literal trailing space visible
+ # in the expected results
+ expected = expected.replace(u'\s', u' ')
@koterpillar
koterpillar added a line comment Feb 19, 2014

Did you mean ur'\s'?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/asserts.py
- if isinstance(original, unicode):
- original = original.encode('utf-8')
+ # consider each line along with it's next line
@koterpillar
koterpillar added a line comment Feb 19, 2014

its

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...al/language_specific_features/ru/success/dumb.feature
@@ -6,5 +6,5 @@
Я хочу что бы тест был зеленый
Сценарий: Ничего не делать
- Пуская я ничего не делаю
+ Когда Пуская я ничего не делаю
@koterpillar
koterpillar added a line comment Feb 19, 2014

Когда я ничего не делаю

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...anguage_specific_features/ru/success/outlines.feature
@@ -6,7 +6,7 @@
Я хочу, что бы сценарии со структурой работали на русском
Структура сценария: Заполнить форму
- Пускай я открываю в браузере "http://sona-studio.com/contacts/"
+ Допустим я открываю в браузере "http://sona-studio.com/contacts/"
@koterpillar
koterpillar added a line comment Feb 19, 2014

Пусть я открываю в браузере "http://sona-studio.com/contacts/"

@koterpillar
koterpillar added a line comment Feb 19, 2014

Also, who is this sona-studio.com? Should use something from IANA, like example.com.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...l/language_specific_features/ru/success/table.feature
@@ -6,7 +6,7 @@
Я хочу, что бы тесты с таблицами работали отлично и на русском
Сценарий: Проверить таблички
- Пускай имеем таблицу пациентов:
+ Когда Пускай имеем таблицу пациентов:
@koterpillar
koterpillar added a line comment Feb 19, 2014

Когда имеем таблицу пациентов:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/functional/language_specific_features/test_ja.py
def test_output_outlines_success_colorful():
"Language: ja -> sucess outlines colorful"
runner = Runner(join_path('ja', 'success', 'outlines.feature'), verbosity=4)
runner.run()
+ return
@koterpillar
koterpillar added a line comment Feb 19, 2014

Forgotten?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/functional/language_specific_features/test_fr.py
def test_output_outlines2_success_colorful():
"Language: fr -> sucess outlines colorful, alternate name"
+ return
@koterpillar
koterpillar added a line comment Feb 19, 2014

Forgotten?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/functional/language_specific_features/test_ru.py
@@ -39,7 +39,7 @@ def test_output_with_success_colorless():
u' Я хочу что бы тест был зеленый # tests/functional/language_specific_features/ru/success/dumb.feature:6\n'
u'\n'
u' Сценарий: Ничего не делать # tests/functional/language_specific_features/ru/success/dumb.feature:8\n'
- u' Пуская я ничего не делаю # tests/functional/language_specific_features/ru/success/dumb_steps.py:6\n'
+ u' Когда Пуская я ничего не делаю # tests/functional/language_specific_features/ru/success/dumb_steps.py:6\n'
@koterpillar
koterpillar added a line comment Feb 19, 2014

s/ Пуская//g

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/functional/language_specific_features/test_ru.py
@@ -62,7 +62,7 @@ def test_output_of_table_with_success_colorless():
u" Я хочу, что бы тесты с таблицами работали отлично и на русском # tests/functional/language_specific_features/ru/success/table.feature:6\n"
u"\n"
u" Сценарий: Проверить таблички # tests/functional/language_specific_features/ru/success/table.feature:8\n"
- u" Пускай имеем таблицу пациентов: # tests/functional/language_specific_features/ru/success/table_steps.py:5\n"
+ u" Когда Пускай имеем таблицу пациентов: # tests/functional/language_specific_features/ru/success/table_steps.py:5\n"
@koterpillar
koterpillar added a line comment Feb 19, 2014

s/ Пускай//g

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/functional/language_specific_features/test_ru.py
@@ -111,6 +111,8 @@ def test_output_outlines_success_colorful():
runner = Runner(join_path('ru', 'success', 'outlines.feature'), verbosity=4)
runner.run()
+ return
@koterpillar
koterpillar added a line comment Feb 19, 2014

Okay, lots of these everywhere.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
tests/functional/language_specific_features/test_ru.py
- u' | имя | email | сообщение |\n'
- u' | Виталий Игоревич | john@gmail.org | Есть интересный проект, нужно обсудить |\n'
- u' | Марина Банраул | mary@email.com | Мне нравятся ваши дизайны, хочу сайт |\n'
- u'\n'
- u'1 feature (1 passed)\n'
- u'2 scenarios (2 passed)\n'
- u'12 steps (12 passed)\n'
- )
+ assert_stdout_lines(u"""
+Функционал: Проверить вывод структурного сценария # tests/functional/language_specific_features/ru/success/outlines.feature:3
+ Как программист # tests/functional/language_specific_features/ru/success/outlines.feature:4
+ Для того чобы lettuce был надежным # tests/functional/language_specific_features/ru/success/outlines.feature:5
+ Я хочу, что бы сценарии со структурой работали на русском # tests/functional/language_specific_features/ru/success/outlines.feature:6
+
+ Структура сценария: Заполнить форму # tests/functional/language_specific_features/ru/success/outlines.feature:8
+ Пускай я открываю в браузере "http://sona-studio.com/contacts/" # tests/functional/language_specific_features/ru/success/outlines_steps.py:12
@koterpillar
koterpillar added a line comment Feb 19, 2014

Is this even running? Two spaces just before "http.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
...s/functional/language_specific_features/test_zh-CN.py
u" 什么都不做应该运行成功 # tests/functional/language_specific_features/zh-CN/success/dumb.feature:4\n"
u"\n"
u" 场景: 什么都不做 # tests/functional/language_specific_features/zh-CN/success/dumb.feature:6\n"
- u" 如果 什么都不做 # tests/functional/language_specific_features/zh-CN/success/dumb_steps.py:6\n"
+ u" 假如 如果 什么都不做 # tests/functional/language_specific_features/zh-CN/success/dumb_steps.py:6\n"
@koterpillar
koterpillar added a line comment Feb 19, 2014

Okay, I trust these have been copy-pasted from the features, so I'll only comment on the features.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...language_specific_features/zh-CN/success/dumb.feature
什么都不做应该运行成功
场景: 什么都不做
- 如果 什么都不做
+ 假如 如果 什么都不做
@koterpillar
koterpillar added a line comment Feb 19, 2014

假如什么都不做

Note there's no space in the middle. If your parser didn't fix it (which I hope it did), at least make it 假如 什么都不做.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...uage_specific_features/zh-CN/success/outlines.feature
中文场景模板图表测试
- 场景模板: 用表格描述场景
- 如果 输入是<输入>
- 执行<处理>
- 那么 得到<结果>
+ 场景大纲: 用表格描述场景
+ 假如如果 输入是<输入>
@koterpillar
koterpillar added a line comment Feb 19, 2014

假如输入是<输入>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...anguage_specific_features/zh-CN/success/table.feature
简体中文表格步骤的成功测试
场景: 什么都不做的表格步骤测试
- 如果 输入数据如下:
+ 假如 如果 输入数据如下:
@koterpillar
koterpillar added a line comment Feb 19, 2014

假如输入数据如下:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...language_specific_features/zh-TW/success/dumb.feature
什麽都不做應該運行成功
場景: 什麽都不做
- 如果 什麽都不做
+ 假如 什麽都不做
@koterpillar
koterpillar added a line comment Feb 19, 2014

s/ //

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...uage_specific_features/zh-TW/success/outlines.feature
中文場景模板圖表測試
- 場景模板: 用表格描述場景
- 如果 輸入是<輸入>
+ 場景大綱: 用表格描述場景
+ 假如 輸入是<輸入>
@koterpillar
koterpillar added a line comment Feb 19, 2014

s/ // here and below

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on the diff Feb 19, 2014
...anguage_specific_features/zh-TW/success/table.feature
繁體中文表格步驟的成功測試
場景: 什麽都不做的表格步驟測試
- 如果 輸入數據如下:
+ 假如 輸入數據如下:
@koterpillar
koterpillar added a line comment Feb 19, 2014

s/ //

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@koterpillar koterpillar commented on an outdated diff Feb 19, 2014
tests/unit/test_feature_parser.py
@@ -684,20 +708,20 @@ def fill_email(step, email):
last_scenario = feature.scenarios[3]
assert that(last_scenario.tags).equals([])
- result = feature.run()
- print
- print
- for sr in result.scenario_results:
- for failed in sr.steps_failed:
- print "+" * 10
- print
- print failed.why.cause
- print
- print "+" * 10
+ # result = feature.run()
@koterpillar
koterpillar added a line comment Feb 19, 2014

I don't understand why was this here before, but add a FIXME to remove it or something.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@adaschevici
Collaborator

@danni The tests on behave_as are broken. can't find a way to make them work,
The steps don't get associated with their definition it seems.

danni added some commits Mar 22, 2014
@danni danni Fix some broken tests fe39bba
@danni danni Raise SkipTest rather than silently eating skipped tests
This gives a much better idea about what hasn't been resolved.
81e1b38
@danni
Collaborator

@adaschevici: I'm not sure which behave_as tests you mean.

@adaschevici
Collaborator

@danni the functional/test_behave_as_handling.py, they fail because the registry callback list gets emptied when ran. If you runt the tests individually then they pass but they fail if run together.

Danielle Mad... and others added some commits Apr 8, 2014
@coffenbacher

Is this branch still active? Looks promising!

@danni
Collaborator

Yes. It's usable, we're using it at Infoxchange. It just needs someone to go through and fix the rest of the tests and it can be merged and released as lettuce 0.3.

@coffenbacher

Great! I tried it - works for me. When I get a chance, I'll try to contribute to the tests.

koterpillar and others added some commits Aug 3, 2014
@koterpillar koterpillar Selectively clear steps 61e1a83
@koterpillar koterpillar Fix some tests
- Update output formatting
- Fix non-ASCII in proposed function definitions
- Stable order for function definitions
- Deduplicate function definitions
5986837
@koterpillar koterpillar Fix output plugins clashing with each other e1a210b
@koterpillar koterpillar Fix scenario names output behavior on ERROR and UNDEF b1bd4a4
@koterpillar koterpillar Update tests for dots output bd0e6e2
@danni danni Gherkin compliant multiline parsing 6d61fc7
@danni danni Test strange indenting 30d24fc
@danni danni Warn about underindented strings fd03c6b
@danni danni Reenable unit tests for step.represented 579273c
@danni danni Preserve outline ordering 72e8f79
@danni danni Remove some skiptests 7eb6c03
@danni danni Fix regressions caused by fixing outlines ordering
Remove coloured output tests, they are completely broken and need
rebuilding.
338cf51
@danni danni Preserve the registry when creating steps for a test 881e3ef
@danni danni Fix XUnit tests 4c3c837
@danni danni Fix subunit tests 0e60e0c
@koterpillar koterpillar Fix finding definitions for background steps a62c9d1
@koterpillar koterpillar Fix relying on dirty state in tests 4a763e3
@koterpillar koterpillar Put registry.clear() back c97ad81
Danielle Madeley Don't eat import errors and syntax errors 5b35d44
Danielle Madeley Flush messages as soon as they are printed 73764cb
@koterpillar koterpillar Merge branch 'new-parser' into new-parser-mail-steps c5994bc
Danielle Madeley Implement function unregistering 94ad296
@koterpillar koterpillar Pay attention to closures when registering functions 5d21f52
@koterpillar koterpillar Allow underscores in "I update models by..." fd83f96
@koterpillar koterpillar Fix dill integration tests 6eea4fe
@koterpillar koterpillar Add per-row test_existence function 3355c4c
@koterpillar koterpillar Negative existence step 73ca110
@koterpillar koterpillar DeprecationWarning d2277ac
@koterpillar koterpillar Refactor checking extra attributes in existence step 3cacedc
@koterpillar koterpillar Don't pass should_exist to user supplied function b818cbb
@koterpillar koterpillar Merge branch 'negative-existence-step' into new-parser f83f327
Kane Cavanagh Add option to list available steps b0417a0
@kane-c kane-c Merge pull request #13 from infoxchange/list-steps
Add option to list available steps
b00c2c8
@danni
Collaborator

The new-parser branch has been superseded by Aloe.

@danni danni closed this Aug 11, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment