Module: JsshSocket

Included in:
FireWatir::Container, FireWatir::ElementCollections
Defined in:
lib/firewatir/jssh_socket.rb

Instance Method Summary collapse

Instance Method Details

#js_eval(str) ⇒ Object

Evaluate javascript and return result. Raise an exception if an error occurred.



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/firewatir/jssh_socket.rb', line 10

def js_eval(str)
  str.gsub!("\n", "")
  jssh_socket.send("#{str};\n", 0)
  value = read_socket()
  if md = /^(\w+)Error:(.*)$/.match(value)
    errclassname="JS#{md[1]}Error"
    unless JsshSocket.const_defined?(errclassname)
      JsshSocket.const_set(errclassname, Class.new(StandardError))
    end
    raise JsshSocket.const_get(errclassname), md[2]
  end
  value
end

#js_eval_method(method_name) ⇒ Object

evaluate the provides javascript method on the current object and return the result



26
27
28
# File 'lib/firewatir/jssh_socket.rb', line 26

def js_eval_method method_name
  js_eval("#{element_object}.#{method_name}")
end

#jssh_socketObject



30
31
32
# File 'lib/firewatir/jssh_socket.rb', line 30

def jssh_socket
  $jssh_socket || @container.jssh_socket
end

#read_socket(socket = jssh_socket) ⇒ Object

Description:

Reads the javascript execution result from the jssh socket.

Input: - socket - It is the jssh socket, the only point of communication between the browser and firewatir scripts.

Output: The javascript execution result as string.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/firewatir/jssh_socket.rb', line 44

def read_socket(socket = jssh_socket)
  return_value = ""
  data = ""
  receive = true
  #puts Thread.list

  s = nil
  while(s == nil) do
    s = Kernel.select([socket] , nil , nil, 1)
  end
  #if(s != nil)

  for stream in s[0]
    data = stream.recv(1024)
    #puts "data is : #{data}"

    while(receive)
      #while(data.length == 1024)

      return_value += data
      if(return_value.include?("\n> "))
        receive = false
      else
        data = stream.recv(1024)
      end
      #puts "return_value is : #{return_value}"

      #puts "data length is : #{data.length}"

    end
  end

  # If received data is less than 1024 characters or for last data

  # we read in the above loop

  #return_value += data


  # Get the command prompt inserted by JSSH

  #s = Kernel.select([socket] , nil , nil, 0.3)


  #if(s != nil)

  #    for stream in s[0]

  #        return_value += socket.recv(1024)

  #    end

  #end


  length = return_value.length
  #puts "Return value before removing command prompt is : #{return_value}"


  #Remove the command prompt. Every result returned by JSSH has "\n> " at the end.

  if length <= 3
    return_value = ""
  elsif(return_value[0..2] == "\n> ")
    return_value = return_value[3..length-1]
  else
    #return_value = return_value[0..length-3]

    return_value = return_value[0..length-4]
  end
  #puts "Return value after removing command prompt is : #{return_value}"

  #socket.flush


  # make sure that command prompt doesn't get there.

  if(return_value[return_value.length - 3..return_value.length - 1] == "\n> ")
    return_value = return_value[0..return_value.length - 4]
  end
  if(return_value[0..2] == "\n> ")
    return_value = return_value[3..return_value.length - 1]
  end
  #puts "return value is : #{return_value}"

  return return_value
end

#valid_js_identifier?(str) ⇒ Boolean

Determine if str is a valid identifier in Javascript This is NOT a full validation - it will mess up on unicode. Sorry. See Section 7.6 of the ECMA-262 spec

Returns:

  • (Boolean)


5
6
7
# File 'lib/firewatir/jssh_socket.rb', line 5

def valid_js_identifier?(str)
  /\A[a-z$_][a-z0-9]*\Z/i.match(str)
end