Commit a69a8a20c3d61a825a1e6021527b04499a2bdf1e

Golmote 2015-08-26T08:21:16

Merge pull request #697 from Golmote/tests-fortran Add tests for Fortran

diff --git a/tests/languages/fortran/boolean_feature.test b/tests/languages/fortran/boolean_feature.test
new file mode 100644
index 0000000..88bdb6b
--- /dev/null
+++ b/tests/languages/fortran/boolean_feature.test
@@ -0,0 +1,13 @@
+.TRUE.
+.false.
+
+----------------------------------------------------
+
+[
+	["boolean", ".TRUE."],
+	["boolean", ".false."]
+]
+
+----------------------------------------------------
+
+Checks for boolean.
\ No newline at end of file
diff --git a/tests/languages/fortran/comment_feature.test b/tests/languages/fortran/comment_feature.test
new file mode 100644
index 0000000..c1fe029
--- /dev/null
+++ b/tests/languages/fortran/comment_feature.test
@@ -0,0 +1,13 @@
+!
+! foobar
+
+----------------------------------------------------
+
+[
+	["comment", "!"],
+	["comment", "! foobar"]
+]
+
+----------------------------------------------------
+
+Checks for comments.
\ No newline at end of file
diff --git a/tests/languages/fortran/keyword_feature.test b/tests/languages/fortran/keyword_feature.test
new file mode 100644
index 0000000..e3bb493
--- /dev/null
+++ b/tests/languages/fortran/keyword_feature.test
@@ -0,0 +1,199 @@
+INTEGER
+REAL
+DOUBLE PRECISION
+DOUBLEPRECISION
+COMPLEX
+CHARACTER
+LOGICAL
+
+ALLOCATABLE
+ALLOCATE
+BACKSPACE
+CALL
+CASE
+CLOSE
+COMMON
+CONTAINS
+CONTINUE
+CYCLE
+DATA
+DEALLOCATE
+DIMENSION
+DO
+END
+EQUIVALENCE
+EXIT
+EXTERNAL
+FORMAT
+GO TO
+GOTO
+IMPLICIT
+IMPLICIT NONE
+INQUIRE
+INTENT
+INTRINSIC
+MODULE PROCEDURE
+NAMELIST
+NULLIFY
+OPEN
+OPTIONAL
+PARAMETER
+POINTER
+PRINT
+PRIVATE
+PUBLIC
+READ
+RETURN
+REWIND
+SAVE
+SELECT
+STOP
+TARGET
+WHILE
+WRITE
+
+BLOCK DATA
+BLOCKDATA
+END BLOCK DATA
+ENDBLOCKDATA
+DO
+ENDDO
+FILE
+FORALL
+FUNCTION
+IF
+END IF
+INTERFACE
+MODULE
+PROGRAM
+SELECT
+SUBROUTINE
+TYPE
+WHERE
+
+ASSIGNMENT
+DEFAULT
+ELEMENTAL
+ELSE
+ELSEWHERE
+ELSEIF
+ENTRY
+IN
+INCLUDE
+INOUT
+KIND
+NULL
+ONLY
+OPERATOR
+OUT
+PURE
+RECURSIVE
+RESULT
+SEQUENCE
+STAT
+THEN
+USE
+
+----------------------------------------------------
+
+[
+	["keyword", "INTEGER"],
+	["keyword", "REAL"],
+	["keyword", "DOUBLE PRECISION"],
+	["keyword", "DOUBLEPRECISION"],
+	["keyword", "COMPLEX"],
+	["keyword", "CHARACTER"],
+	["keyword", "LOGICAL"],
+
+	["keyword", "ALLOCATABLE"],
+	["keyword", "ALLOCATE"],
+	["keyword", "BACKSPACE"],
+	["keyword", "CALL"],
+	["keyword", "CASE"],
+	["keyword", "CLOSE"],
+	["keyword", "COMMON"],
+	["keyword", "CONTAINS"],
+	["keyword", "CONTINUE"],
+	["keyword", "CYCLE"],
+	["keyword", "DATA"],
+	["keyword", "DEALLOCATE"],
+	["keyword", "DIMENSION"],
+	["keyword", "DO"],
+	["keyword", "END"],
+	["keyword", "EQUIVALENCE"],
+	["keyword", "EXIT"],
+	["keyword", "EXTERNAL"],
+	["keyword", "FORMAT"],
+	["keyword", "GO TO"],
+	["keyword", "GOTO"],
+	["keyword", "IMPLICIT"],
+	["keyword", "IMPLICIT NONE"],
+	["keyword", "INQUIRE"],
+	["keyword", "INTENT"],
+	["keyword", "INTRINSIC"],
+	["keyword", "MODULE PROCEDURE"],
+	["keyword", "NAMELIST"],
+	["keyword", "NULLIFY"],
+	["keyword", "OPEN"],
+	["keyword", "OPTIONAL"],
+	["keyword", "PARAMETER"],
+	["keyword", "POINTER"],
+	["keyword", "PRINT"],
+	["keyword", "PRIVATE"],
+	["keyword", "PUBLIC"],
+	["keyword", "READ"],
+	["keyword", "RETURN"],
+	["keyword", "REWIND"],
+	["keyword", "SAVE"],
+	["keyword", "SELECT"],
+	["keyword", "STOP"],
+	["keyword", "TARGET"],
+	["keyword", "WHILE"],
+	["keyword", "WRITE"],
+
+	["keyword", "BLOCK DATA"],
+	["keyword", "BLOCKDATA"],
+	["keyword", "END BLOCK DATA"],
+	["keyword", "ENDBLOCKDATA"],
+	["keyword", "DO"],
+	["keyword", "ENDDO"],
+	["keyword", "FILE"],
+	["keyword", "FORALL"],
+	["keyword", "FUNCTION"],
+	["keyword", "IF"],
+	["keyword", "END IF"],
+	["keyword", "INTERFACE"],
+	["keyword", "MODULE"],
+	["keyword", "PROGRAM"],
+	["keyword", "SELECT"],
+	["keyword", "SUBROUTINE"],
+	["keyword", "TYPE"],
+	["keyword", "WHERE"],
+
+	["keyword", "ASSIGNMENT"],
+	["keyword", "DEFAULT"],
+	["keyword", "ELEMENTAL"],
+	["keyword", "ELSE"],
+	["keyword", "ELSEWHERE"],
+	["keyword", "ELSEIF"],
+	["keyword", "ENTRY"],
+	["keyword", "IN"],
+	["keyword", "INCLUDE"],
+	["keyword", "INOUT"],
+	["keyword", "KIND"],
+	["keyword", "NULL"],
+	["keyword", "ONLY"],
+	["keyword", "OPERATOR"],
+	["keyword", "OUT"],
+	["keyword", "PURE"],
+	["keyword", "RECURSIVE"],
+	["keyword", "RESULT"],
+	["keyword", "SEQUENCE"],
+	["keyword", "STAT"],
+	["keyword", "THEN"],
+	["keyword", "USE"]
+]
+
+----------------------------------------------------
+
+Checks for keywords.
\ No newline at end of file
diff --git a/tests/languages/fortran/number_feature.test b/tests/languages/fortran/number_feature.test
new file mode 100644
index 0000000..c7b4a4c
--- /dev/null
+++ b/tests/languages/fortran/number_feature.test
@@ -0,0 +1,37 @@
+473
+21_2
+21_SHORT
+1976354279568241_8
+1.6E3
+0.45E-4
+10.93E7_QUAD
+3E4
+B'01110'
+B"010"
+O'047'
+O"642"
+Z'F41A'
+Z"00BC"
+
+----------------------------------------------------
+
+[
+	["number", "473"],
+	["number", "21_2"],
+	["number", "21_SHORT"],
+	["number", "1976354279568241_8"],
+	["number", "1.6E3"],
+	["number", "0.45E-4"],
+	["number", "10.93E7_QUAD"],
+	["number", "3E4"],
+	["quoted-number", "B'01110'"],
+    ["quoted-number", "B\"010\""],
+    ["quoted-number", "O'047'"],
+    ["quoted-number", "O\"642\""],
+    ["quoted-number", "Z'F41A'"],
+    ["quoted-number", "Z\"00BC\""]
+]
+
+----------------------------------------------------
+
+Checks for numbers and quoted numbers.
\ No newline at end of file
diff --git a/tests/languages/fortran/operator_feature.test b/tests/languages/fortran/operator_feature.test
new file mode 100644
index 0000000..d2d3003
--- /dev/null
+++ b/tests/languages/fortran/operator_feature.test
@@ -0,0 +1,25 @@
+** // =>
+== /= ::
+< <= > >=
++ - * / = %
+.EQ. .NE. .LT. .LE.
+.GT. .GE. .NOT. .AND.
+.OR. .EQV. .NEQV.
+.foobar.
+
+----------------------------------------------------
+
+[
+	["operator", "**"], ["operator", "//"], ["operator", "=>"],
+	["operator", "=="], ["operator", "/="], ["operator", "::"],
+	["operator", "<"], ["operator", "<="], ["operator", ">"], ["operator", ">="],
+	["operator", "+"], ["operator", "-"], ["operator", "*"], ["operator", "/"], ["operator", "="], ["operator", "%"],
+	["operator", ".EQ."], ["operator", ".NE."], ["operator", ".LT."], ["operator", ".LE."],
+	["operator", ".GT."], ["operator", ".GE."], ["operator", ".NOT."], ["operator", ".AND."],
+	["operator", ".OR."], ["operator", ".EQV."], ["operator", ".NEQV."],
+	["operator", ".foobar."]
+]
+
+----------------------------------------------------
+
+Checks for all operators.
\ No newline at end of file
diff --git a/tests/languages/fortran/string_feature.test b/tests/languages/fortran/string_feature.test
new file mode 100644
index 0000000..3fa6f74
--- /dev/null
+++ b/tests/languages/fortran/string_feature.test
@@ -0,0 +1,31 @@
+""
+''
+"foo ""bar"" baz"
+'foo ''bar'' baz'
+ITALICS_'foobar'
+"foo &
+	&bar"
+"foo &
+	! Comment
+	&bar"
+
+----------------------------------------------------
+
+[
+	["string", ["\"\""]],
+	["string", ["''"]],
+	["string", ["\"foo \"\"bar\"\" baz\""]],
+	["string", ["'foo ''bar'' baz'"]],
+	["string", ["ITALICS_'foobar'"]],
+	["string", ["\"foo &\r\n\t&bar\""]],
+	["string", [
+		"\"foo &\r\n\t",
+		["comment", "! Comment"],
+		"\r\n\t&bar\""
+	]]
+]
+
+----------------------------------------------------
+
+Checks for strings and line continuation.
+Also checks for comments inside strings.
\ No newline at end of file