diff --git a/__tests__/__snapshots__/light-async.js.snap b/__tests__/__snapshots__/light-async.js.snap index f32bd651c..051401016 100644 --- a/__tests__/__snapshots__/light-async.js.snap +++ b/__tests__/__snapshots__/light-async.js.snap @@ -1,6 +1,679 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`SyntaxHighlighter renders jsx highlighted text 1`] = ` +exports[`SyntaxHighlighter async load language if not registered 1`] = ` +
+  
+    print(
+    
+      'hello'
+    
+    )
+  
+
+`; + +exports[`SyntaxHighlighter renders fortran highlighted text 1`] = ` +
+  
+    
+            C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT 
+    
+      
+        FUNCTION
+      
+    
+    
+            C INPUT - TAPE READER 
+    
+      UNIT
+    
+     
+    
+      5
+    
+    , 
+    
+      INTEGER
+    
+     INPUT
+            C OUTPUT - LINE PRINTER 
+    
+      UNIT
+    
+     
+    
+      6
+    
+    , 
+    
+      REAL
+    
+     OUTPUT
+            C INPUT ERROR DISPLAY ERROR OUTPUT CODE 
+    
+      1
+    
+     
+    
+      IN
+    
+     JOB CONTROL LISTING
+                READ INPUT TAPE 
+    
+      5
+    
+    , 
+    
+      501
+    
+    , IA, IB, IC
+            
+    
+      501
+    
+     
+    
+      FORMAT
+    
+     (I5)
+            C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO
+            C FURTHERMORE, THE 
+    
+      SUM
+    
+     OF TWO SIDES OF A TRIANGLE
+            C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
+                
+    
+      IF
+    
+     (IA) 
+    
+      777
+    
+    , 
+    
+      777
+    
+    , 
+    
+      701
+    
+    
+            
+    
+      701
+    
+     
+    
+      IF
+    
+     (IB) 
+    
+      777
+    
+    , 
+    
+      777
+    
+    , 
+    
+      702
+    
+    
+            
+    
+      702
+    
+     
+    
+      IF
+    
+     (IC) 
+    
+      777
+    
+    , 
+    
+      777
+    
+    , 
+    
+      703
+    
+    
+            
+    
+      703
+    
+     
+    
+      IF
+    
+     (IA+IB-IC) 
+    
+      777
+    
+    , 
+    
+      777
+    
+    , 
+    
+      704
+    
+    
+            
+    
+      704
+    
+     
+    
+      IF
+    
+     (IA+IC-IB) 
+    
+      777
+    
+    , 
+    
+      777
+    
+    , 
+    
+      705
+    
+    
+            
+    
+      705
+    
+     
+    
+      IF
+    
+     (IB+IC-IA) 
+    
+      777
+    
+    , 
+    
+      777
+    
+    , 
+    
+      799
+    
+    
+            
+    
+      777
+    
+     
+    
+      STOP
+    
+     
+    
+      1
+    
+    
+            C USING HERON
+    
+      'S FORMULA WE CALCULATE THE
+            C AREA OF THE TRIANGLE
+            799 S = FLOATF (IA + IB + IC) / 2.0
+                AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
+                +     (S - FLOATF(IC)))
+                WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
+            601 FORMAT (4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,
+                +        13H SQUARE UNITS)
+                STOP
+                END
+                   
+    
+  
+
+`; + +exports[`SyntaxHighlighter renders javascript highlighted text 1`] = `
 `;
 
-exports[`SyntaxHighlighter should just render text if syntax is not registered 1`] = `
+exports[`SyntaxHighlighter renders text while language loads 1`] = `
 
-    print(
-    
-      'hello'
-    
-    )
+    
+            C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
+            C INPUT - TAPE READER UNIT 5, INTEGER INPUT
+            C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
+            C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
+                READ INPUT TAPE 5, 501, IA, IB, IC
+            501 FORMAT (3I5)
+            C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO
+            C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
+            C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
+                IF (IA) 777, 777, 701
+            701 IF (IB) 777, 777, 702
+            702 IF (IC) 777, 777, 703
+            703 IF (IA+IB-IC) 777, 777, 704
+            704 IF (IA+IC-IB) 777, 777, 705
+            705 IF (IB+IC-IA) 777, 777, 799
+            777 STOP 1
+            C USING HERON'S FORMULA WE CALCULATE THE
+            C AREA OF THE TRIANGLE
+            799 S = FLOATF (IA + IB + IC) / 2.0
+                AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
+                +     (S - FLOATF(IC)))
+                WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
+            601 FORMAT (4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,
+                +        13H SQUARE UNITS)
+                STOP
+                END
+                   
   
 
`; diff --git a/__tests__/__snapshots__/prism-async-light.js.snap b/__tests__/__snapshots__/prism-async-light.js.snap index 8ca91cb93..220efe02a 100644 --- a/__tests__/__snapshots__/prism-async-light.js.snap +++ b/__tests__/__snapshots__/prism-async-light.js.snap @@ -123,67 +123,12 @@ exports[`SyntaxHighlighter should just render text if syntax is not registered 1 } } > - - print - - - ( - - - 'hello' - - - ) - + print('hello')
`; -exports[`When the code split is loaded - SyntaxHighlighter renders jsx highlighted text 1`] = ` +exports[`When the code split is loaded - SyntaxHighlighter renders python highlighted text after async loading python 1`] = `
+    
+             
     
-      import
+      # Import the modules
     
-     React 
+    
+
     
-      from
+      import
     
-     
+     sys
+
     
-      "react"
+      import
     
+     random
+
+ans 
     
-      ;
+      =
     
-    
-  
+     
     
-      import
+      True
     
-     uniquePropHOC 
+    
+
+
     
-      from
-    
-     
-    
-      "./lib/unique-prop-hoc"
+      while
     
+     ans
     
-      ;
+      :
     
     
-  
-  
+    question 
     
-      class
+      =
     
      
     
-      Expire
+      raw_input
     
-     
     
-      extends
+      (
     
-     
     
-      React
-      
-        .
-      
-      Component
+      "Ask the magic 8 ball a question: (press enter to quit) "
     
-     
     
-      {
+      )
     
     
-      
+    
+    answers 
     
-      constructor
+      =
     
+     random
     
-      (
+      .
     
-    props
+    randint
     
-      )
+      (
     
-     
     
-      {
+      1
     
-    
-          
     
-      super
+      ,
     
     
-      (
+      8
     
-    props
     
       )
     
+    
+    
+    
     
-      ;
+      if
     
-    
-          
+     question 
     
-      this
+      ==
     
+     
     
-      .
+      ""
     
-    state 
     
-      =
+      :
     
-     
+    
+        sys
     
-      {
+      .
     
-     component
+    exit
     
-      :
+      (
     
-     props
     
-      .
+      )
     
-    children 
+    
+    
+    
     
-      }
+      elif
     
-    
-      
+     answers 
     
-      }
+      ==
     
-    
-      
+     
     
-      componentDidMount
+      1
     
     
-      (
+      :
     
+    
+        
     
-      )
+      print
     
      
     
-      {
+      "It is certain"
     
     
-          
+    
+    
     
-      setTimeout
+      elif
     
+     answers 
     
-      (
+      ==
     
+     
     
-      (
+      2
     
     
-      )
+      :
     
-     
+    
+        
     
-      =>
+      print
     
      
     
-      {
+      "Outlook good"
     
     
-              
+    
+    
     
-      this
+      elif
     
+     answers 
     
-      .
+      ==
     
+     
     
-      setState
+      3
     
     
-      (
+      :
     
+    
+        
     
-      {
+      print
     
-    
-                  component
+     
     
-      :
+      "You may rely on it"
     
-     
+    
+    
+    
     
-      null
+      elif
     
-    
-              
+     answers 
     
-      }
+      ==
     
+     
     
-      )
+      4
     
     
-      ;
+      :
     
     
-          
+        
     
-      }
+      print
     
+     
     
-      ,
+      "Ask again later"
     
-     
+    
+    
+    
     
-      this
+      elif
     
+     answers 
     
-      .
+      ==
     
-    props
+     
     
-      .
+      5
     
-    time 
     
-      ||
+      :
     
-     
+    
+        
     
-      this
+      print
     
+     
     
-      .
+      "Concentrate and ask again"
     
-    props
+    
+    
+    
     
-      .
+      elif
     
-    seconds 
+     answers 
     
-      *
+      ==
     
      
     
-      1000
+      6
     
     
-      )
+      :
     
+    
+        
     
-      ;
+      print
     
-    
-      
+     
     
-      }
+      "Reply hazy, try again"
     
     
-      
+    
+    
     
-      render
+      elif
     
+     answers 
     
-      (
+      ==
     
+     
     
-      )
+      7
     
-     
     
-      {
+      :
     
     
-          
+        
     
-      return
+      print
     
      
     
-      this
+      "My reply is no"
     
+    
+    
+    
     
-      .
+      elif
     
-    state
+     answers 
     
-      .
+      ==
     
-    component
+     
     
-      ;
+      8
     
-    
-      
     
-      }
+      :
     
     
-  
+        
     
+      print
+    
+     
+    
+      "My sources say no"
     
+    
+             
   
 
`; diff --git a/__tests__/light-async.js b/__tests__/light-async.js index ea2574711..94467aea9 100644 --- a/__tests__/light-async.js +++ b/__tests__/light-async.js @@ -1,11 +1,16 @@ import React from 'react'; import renderer from 'react-test-renderer'; -import { LightAsync as SyntaxHighlighter } from "../src"; +import languageLoaders from '../src/async-languages/prism'; + +// Tree-shaking doesn't work in testing and loads all the languages +import SyntaxHighlighter from "../src/light-async"; import prism from "../src/styles/prism/prism"; -test('SyntaxHighlighter renders jsx highlighted text', () => { +test('SyntaxHighlighter renders javascript highlighted text', async () => { + await SyntaxHighlighter.preload(); + const tree = renderer.create( - + { `import React from "react"; import uniquePropHOC from "./lib/unique-prop-hoc"; @@ -28,27 +33,29 @@ class Expire extends React.Component { }` } - ).toJSON(); - expect(tree).toMatchSnapshot(); + ); + + expect(tree.toJSON()).toMatchSnapshot(); }); -test('SyntaxHighlighter should just render text if syntax is not registered', () => { +test('SyntaxHighlighter async load language if not registered', async () => { const tree = renderer.create( - + { "print('hello')" } - ).toJSON(); - expect(tree).toMatchSnapshot(); + ) + await languageLoaders.python(jest.fn()); + expect(tree.toJSON()).toMatchSnapshot(); }); test('When the code split is loaded - SyntaxHighlighter renders jsx highlighted text', async () => { await SyntaxHighlighter.preload(); const tree = renderer.create( - + { `import React from "react"; import uniquePropHOC from "./lib/unique-prop-hoc"; @@ -71,7 +78,92 @@ test('When the code split is loaded - SyntaxHighlighter renders jsx highlighted }` } - ).toJSON(); + ); + + await languageLoaders.javascript(jest.fn()); + expect(tree.toJSON()).toMatchSnapshot(); - expect(tree).toMatchSnapshot(); -}); \ No newline at end of file +}); + +test('SyntaxHighlighter renders fortran highlighted text', async () => { + await SyntaxHighlighter.preload(); + + const tree = renderer.create( + + { + ` + C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION + C INPUT - TAPE READER UNIT 5, INTEGER INPUT + C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT + C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING + READ INPUT TAPE 5, 501, IA, IB, IC + 501 FORMAT (3I5) + C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO + C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE + C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO + IF (IA) 777, 777, 701 + 701 IF (IB) 777, 777, 702 + 702 IF (IC) 777, 777, 703 + 703 IF (IA+IB-IC) 777, 777, 704 + 704 IF (IA+IC-IB) 777, 777, 705 + 705 IF (IB+IC-IA) 777, 777, 799 + 777 STOP 1 + C USING HERON'S FORMULA WE CALCULATE THE + C AREA OF THE TRIANGLE + 799 S = FLOATF (IA + IB + IC) / 2.0 + AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) * + + (S - FLOATF(IC))) + WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA + 601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2, + + 13H SQUARE UNITS) + STOP + END + ` + } + + ); + + await languageLoaders.fortran(jest.fn()); + expect(tree.toJSON()).toMatchSnapshot(); + }); + + test('SyntaxHighlighter renders text while language loads', async () => { + await SyntaxHighlighter.preload(); + + const tree = renderer.create( + + { + ` + C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION + C INPUT - TAPE READER UNIT 5, INTEGER INPUT + C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT + C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING + READ INPUT TAPE 5, 501, IA, IB, IC + 501 FORMAT (3I5) + C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO + C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE + C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO + IF (IA) 777, 777, 701 + 701 IF (IB) 777, 777, 702 + 702 IF (IC) 777, 777, 703 + 703 IF (IA+IB-IC) 777, 777, 704 + 704 IF (IA+IC-IB) 777, 777, 705 + 705 IF (IB+IC-IA) 777, 777, 799 + 777 STOP 1 + C USING HERON'S FORMULA WE CALCULATE THE + C AREA OF THE TRIANGLE + 799 S = FLOATF (IA + IB + IC) / 2.0 + AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) * + + (S - FLOATF(IC))) + WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA + 601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2, + + 13H SQUARE UNITS) + STOP + END + ` + } + + ); + + expect(tree.toJSON()).toMatchSnapshot(); + }); \ No newline at end of file diff --git a/__tests__/prism-async-light.js b/__tests__/prism-async-light.js index 8ecebc8ce..ac78887cf 100644 --- a/__tests__/prism-async-light.js +++ b/__tests__/prism-async-light.js @@ -1,7 +1,10 @@ import React from 'react'; import renderer from 'react-test-renderer'; -import { PrismAsyncLight as SyntaxHighlighter } from "../src"; + +// Tree-shaking doesn't work in testing and loads all the languages +import SyntaxHighlighter from "../src/prism-async-light"; import prism from "../src/styles/prism/prism"; +import languageLoaders from "../src/async-languages/prism"; test('SyntaxHighlighter renders jsx highlighted text', () => { const tree = renderer.create( @@ -35,7 +38,7 @@ class Expire extends React.Component { test('SyntaxHighlighter should just render text if syntax is not registered', () => { const tree = renderer.create( - + { "print('hello')" } @@ -44,34 +47,56 @@ test('SyntaxHighlighter should just render text if syntax is not registered', () expect(tree).toMatchSnapshot(); }); -test('When the code split is loaded - SyntaxHighlighter renders jsx highlighted text', async () => { +test('When the code split is loaded - SyntaxHighlighter renders python highlighted text after async loading python', async () => { await SyntaxHighlighter.preload(); const tree = renderer.create( - + { - `import React from "react"; - import uniquePropHOC from "./lib/unique-prop-hoc"; - - class Expire extends React.Component { - constructor(props) { - super(props); - this.state = { component: props.children } - } - componentDidMount() { - setTimeout(() => { - this.setState({ - component: null - }); - }, this.props.time || this.props.seconds * 1000); - } - render() { - return this.state.component; - } - }` + ` + # Import the modules +import sys +import random + +ans = True + +while ans: + question = raw_input("Ask the magic 8 ball a question: (press enter to quit) ") + + answers = random.randint(1,8) + + if question == "": + sys.exit() + + elif answers == 1: + print "It is certain" + + elif answers == 2: + print "Outlook good" + + elif answers == 3: + print "You may rely on it" + + elif answers == 4: + print "Ask again later" + + elif answers == 5: + print "Concentrate and ask again" + + elif answers == 6: + print "Reply hazy, try again" + + elif answers == 7: + print "My reply is no" + + elif answers == 8: + print "My sources say no" + ` } - ).toJSON(); + ); + + await languageLoaders.python(jest.fn()); - expect(tree).toMatchSnapshot(); + expect(tree.toJSON()).toMatchSnapshot(); });