UNPKG

2.18 kBtext/coffeescriptView Raw
1
2React = window.React or require 'react'
3
4# fbp-spec UI library
5# List of tests
6{ div, label, span } = React.DOM
7class SuiteHeaderClass
8 render: () ->
9 (div {className: 'suite-header'}, [
10 label { className: 'name' }, @props.name
11 label { className: 'topic' }, @props.topic
12 ])
13SuiteHeader = React.createFactory SuiteHeaderClass
14
15class TestCaseListingClass
16 render: () ->
17 (div {className: "testcase"}, [
18 (label { className: 'name' }, @props.name)
19 (label { className: 'assertion' }, @props.assertion )
20 (label { className: 'error' }, @props.error or '' )
21 ])
22TestCaseListing = React.createFactory TestCaseListingClass
23
24{ ul, li } = React.DOM
25class TestsListingClass
26 render: () ->
27 createCase = (testcase) ->
28 c = if testcase.passed then 'pass' else 'fail'
29 c = 'skip' if testcase.skip
30 c = 'pending' if not testcase.passed?
31 (li { className: c }, [TestCaseListing testcase])
32
33 createSuite = (suite) ->
34 (li {className: "testsuite"}, [
35 (SuiteHeader suite)
36 (ul {}, [ suite.cases.map createCase ])
37 ])
38
39 (ul {}, [
40 @props.suites.map createSuite
41 ])
42TestsListing = React.createFactory TestsListingClass
43
44# Project wide test status
45countCases = (suites, predicate) ->
46 count = 0
47 for suite in suites
48 for testcase in suite.cases
49 count += 1 if predicate testcase, suite
50 return count
51
52class TestStatusClass
53 render: () ->
54 total = countCases @props.suites, () -> return true
55 passing = countCases @props.suites, (c) -> return c.passed? and c.passed
56 failing = countCases @props.suites, (c) -> return c.passed? and not c.passed
57 skipped = countCases @props.suites, (c, s) -> return c.skip? or s.skip?
58 # TODO: also consider pending
59 # TODO: visualize running / not-running
60 # FIXME: visualize overall pass/fail
61 (ul {className: 'test-status'}, [
62 (li {className: 'pass'}, passing)
63 (li {className: 'fail'}, failing)
64 (li {className: 'skip'}, skipped)
65 (li {className: 'total'}, total)
66 ])
67
68TestStatus = React.createFactory TestStatusClass
69
70module.exports =
71 TestStatus: TestStatus
72 TestsListing: TestsListing