Nessuna descrizione

reporter.js 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import React, {Component} from 'react';
  2. import {
  3. AppRegistry,
  4. StyleSheet,
  5. Text,
  6. View,
  7. Platform,
  8. ScrollView,
  9. Image,
  10. } from 'react-native';
  11. import Assert from './assert.js'
  12. export default class Reporter extends Component {
  13. props : {
  14. context : TestContext
  15. };
  16. render() {
  17. return (
  18. <ScrollView key="rn-test-scroller" style={styles.container}>
  19. {this.renderTests()}
  20. </ScrollView>)
  21. }
  22. renderTests() {
  23. return this.props.context.tests.map((t, i) => {
  24. let pass = true
  25. let foundAssertions = false
  26. if(Array.isArray(t.result)) {
  27. t.result = t.result.map((r) => {
  28. if(r.type.name === 'Assert') {
  29. foundAssertions = true
  30. let comp = r.props.comparer ? r.props.comparer(r.props.expect, r.props.actual) : (r.props.actual === r.props.expect)
  31. pass = pass && comp
  32. }
  33. return React.cloneElement(r, {desc : r.key})
  34. })
  35. }
  36. t.status = foundAssertions ? (pass ? 'pass' : 'fail') : 'pass'
  37. return (<View key={'rn-test-' + t.desc} style={{
  38. borderBottomWidth : 1.5,
  39. borderColor : '#DDD',
  40. }}>
  41. <View key={t.desc} style={{
  42. alignItems : 'center',
  43. flexDirection : 'row'
  44. }}>
  45. <Text style={[styles.badge, {flex : 1, borderWidth : 0, textAlign : 'left'}]}>{t.desc}</Text>
  46. <Text style={[styles.badge, this.getBadge(t.status)]}>{t.status ? 'pass' : 'fail'}</Text>
  47. </View>
  48. <View key={t.desc + '-result'} style={{backgroundColor : '#F4F4F4'}}>
  49. {t.result}
  50. </View>
  51. </View>)
  52. })
  53. }
  54. getBadge(status: 'running' | 'pass' | 'fail') {
  55. if(status === 'running')
  56. return styles.badgeWaiting
  57. else if(status === 'pass')
  58. return styles.badgePass
  59. else
  60. return styles.badgeFail
  61. }
  62. }
  63. const styles = StyleSheet.create({
  64. container: {
  65. flex: 1,
  66. marginTop : 40,
  67. },
  68. badge : {
  69. margin : 16,
  70. padding : 4,
  71. borderRadius : 4,
  72. borderWidth : 2,
  73. textAlign : 'center'
  74. },
  75. badgePass: {
  76. borderColor : '#00a825',
  77. color : '#00a825'
  78. },
  79. badgeWaiting: {
  80. borderColor : '#e3c423',
  81. color : '#e3c423'
  82. },
  83. badgeFail: {
  84. borderColor : '#ff0d0d',
  85. color : '#ff0d0d'
  86. }
  87. });