note
	description: "[
		Eiffel tests that can be executed by testing tool.
	]"
	author: "EiffelStudio test wizard"
	date: "$Date$"
	revision: "$Revision$"
	testing: "type/manual"

class
	TEST_JSON_SUITE

inherit
	EQA_TEST_SET
		redefine
			on_prepare
		end

feature {NONE} -- Events

	on_prepare
			-- <Precursor>
		do
			create file_reader
		end

feature -- Tests Pass

	test_json_pass1
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("pass1.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("pass1.json",parse_json.is_parsed = True)
			end
		end

	test_json_pass2
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("pass2.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("pass2.json",parse_json.is_parsed = True)
			end
		end

    test_json_pass3
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("pass3.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("pass3.json",parse_json.is_parsed = True)
			end
		end

	test_json_utf_8_pass1
		local
			parse_json: like new_json_parser
			utf: UTF_CONVERTER
			s: READABLE_STRING_32
		do
			s := {STRING_32} "{ %"nihaoma%": %"你好吗\t?%" }"

			parse_json := new_json_parser (utf.string_32_to_utf_8_string_8 (s))
			json_value := parse_json.parse_json
			assert ("utf8.pass1.json", parse_json.is_parsed = True)
			if
				attached {JSON_OBJECT} json_value as jo and then
				attached {JSON_STRING} jo.item ("nihaoma") as js
			then
				assert ("utf8.nihaoma", js.unescaped_string_32.same_string ({STRING_32} "你好吗%T?"))
			else
				assert ("utf8.nihaoma", False)
			end
		end

feature -- Tests Failures
    test_json_fail1
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail1.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail1.json",parse_json.is_parsed = False)
			end
		end

    test_json_fail2
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail2.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail2.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail3
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail3.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail3.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail4
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail4.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail4.json",parse_json.is_parsed = False)
			end
		end

    test_json_fail5
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail5.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail5.json",parse_json.is_parsed = False)
			end
		end


	test_json_fail6
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail6.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail6.json",parse_json.is_parsed = False )
			end
		end

 	test_json_fail7
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail7.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail7.json",parse_json.is_parsed = False)
			end
		end

  	test_json_fail8
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail8.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail8.json",parse_json.is_parsed = False )
			end
		end


	test_json_fail9
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail9.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail9.json",parse_json.is_parsed = False)
			end
		end


	test_json_fail10
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail10.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail10.json",parse_json.is_parsed = False)
			end
		end

   	test_json_fail11
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail11.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail11.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail12
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail12.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail12.json",parse_json.is_parsed = False)
			end
		end

    test_json_fail13
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail13.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail13.json",parse_json.is_parsed = False)
			end
		end

  	test_json_fail14
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail14.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail14.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail15
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail15.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail15.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail16
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail16.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail16.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail17
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail17.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail17.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail18
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail18.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail18.json",parse_json.is_parsed = True)
			end
		end

	test_json_fail19
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail19.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail19.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail20
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail20.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail20.json",parse_json.is_parsed = False)
			end
		end

    test_json_fail21
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail21.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail21.json",parse_json.is_parsed = False)
			end
		end


 	test_json_fail22
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail22.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail22.json",parse_json.is_parsed = False)
			end
		end

    test_json_fail23
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail23.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail23.json",parse_json.is_parsed = False)
			end
		end

 	test_json_fail24
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail24.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail24.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail25
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail25.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail25.json",parse_json.is_parsed = False)
			end
		end


   	test_json_fail26
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail26.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail26.json",parse_json.is_parsed = False)
			end
		end


   	test_json_fail27
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail27.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail27.json",parse_json.is_parsed = False)
			end
		end


   	test_json_fail28
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail28.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail28.json",parse_json.is_parsed = False)
			end
		end


   	test_json_fail29
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail29.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail29.json",parse_json.is_parsed = False )
			end
		end


   	test_json_fail30
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail30.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail30.json",parse_json.is_parsed = False)
			end
		end

	test_json_fail31
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail31.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail31.json",parse_json.is_parsed = False)
			end
		end

    test_json_fail32
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail32.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail32.json",parse_json.is_parsed = False)
			end
		end

    test_json_fail33
    		--
		local
			parse_json: like new_json_parser
		do
			if attached json_file_from ("fail33.json") as json_file then
				parse_json := new_json_parser (json_file)
				json_value := parse_json.parse_json
				assert ("fail33.json",parse_json.is_parsed = False)
			end
		end

feature -- JSON_FROM_FILE

	file_reader: JSON_FILE_READER

	json_value: detachable JSON_VALUE

   	json_file_from (fn: STRING): detachable STRING
   		local
   			f: RAW_FILE
   			l_path: STRING
			test_dir: STRING
			i: INTEGER
		do
			test_dir := (create {EXECUTION_ENVIRONMENT}).current_working_directory
			test_dir.append_character ((create {OPERATING_ENVIRONMENT}).directory_separator)

			l_path := test_dir + fn
			create f.make_with_name (l_path)
			if f.exists then
					-- Found json file
			else
				-- before EiffelStudio 7.3 , the current dir of autotest execution was not the parent dir of ecf but something like
				-- ..json\test\autotest\test_suite\EIFGENs\test_suite\Testing\execution\TEST_JSON_SUITE.test_json_fail1\..\..\..\..\..\fail1.json
				from
					i := 5
				until
					i = 0
				loop
					test_dir.append_character ('.')
					test_dir.append_character ('.')
					test_dir.append_character ((create {OPERATING_ENVIRONMENT}).directory_separator)
					i := i - 1
				end
				l_path := test_dir + fn
			end
			create f.make_with_name (l_path)
			if f.exists then
				Result := file_reader.read_json_from (l_path)
			end
			assert ("File contains json data", Result /= Void)
		end

	new_json_parser (a_string: STRING): JSON_PARSER
		do
			create Result.make_parser (a_string)
		end


invariant
	file_reader /= Void

end

