spec/faye/websocket/draft75_parser_spec.rb in faye-websocket-0.1.2 vs spec/faye/websocket/draft75_parser_spec.rb in faye-websocket-0.2.0
- old
+ new
@@ -9,24 +9,54 @@
@web_socket = mock Faye::WebSocket
@parser = Faye::WebSocket::Draft75Parser.new(@web_socket)
end
describe :parse do
- it "parses text frames" do
- @web_socket.should_receive(:receive).with("Hello")
- parse [0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xff]
+ shared_examples_for "draft-75 parser" do
+ it "parses text frames" do
+ @web_socket.should_receive(:receive).with("Hello")
+ parse [0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xff]
+ end
+
+ it "parses multiple frames from the same packet" do
+ @web_socket.should_receive(:receive).with("Hello").exactly(2)
+ parse [0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xff, 0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xff]
+ end
+
+ it "parses text frames beginning 0x00-0x7F" do
+ @web_socket.should_receive(:receive).with("Hello")
+ parse [0x66, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xff]
+ end
+
+ it "ignores frames with a length header" do
+ @web_socket.should_not_receive(:receive)
+ parse [0x80, 0x05, 0x48, 0x65, 0x6c, 0x6c, 0x6f]
+ end
+
+ it "parses text following an ignored block" do
+ @web_socket.should_receive(:receive).with("Hello")
+ parse [0x80, 0x02, 0x48, 0x65, 0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xff]
+ end
+
+ it "parses multibyte text frames" do
+ @web_socket.should_receive(:receive).with(encode "Apple = ")
+ parse [0x00, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0xef, 0xa3, 0xbf, 0xff]
+ end
+
+ it "parses frames received in several packets" do
+ @web_socket.should_receive(:receive).with(encode "Apple = ")
+ parse [0x00, 0x41, 0x70, 0x70, 0x6c, 0x65]
+ parse [0x20, 0x3d, 0x20, 0xef, 0xa3, 0xbf, 0xff]
+ end
+
+ it "parses fragmented frames" do
+ @web_socket.should_receive(:receive).with("Hello")
+ parse [0x00, 0x48, 0x65, 0x6c]
+ parse [0x6c, 0x6f, 0xff]
+ end
end
- it "parses multibyte text frames" do
- @web_socket.should_receive(:receive).with(encode "Apple = ")
- parse [0x00, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0xef, 0xa3, 0xbf, 0xff]
- end
-
- it "parses fragmented frames" do
- @web_socket.should_receive(:receive).with("Hello")
- parse [0x00, 0x48, 0x65, 0x6c]
- parse [0x6c, 0x6f, 0xff]
- end
+ it_should_behave_like "draft-75 parser"
end
describe :frame do
it "returns the given string formatted as a WebSocket frame" do
bytes(@parser.frame "Hello").should == [0x00, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xff]