require 'spec_helper' describe RegexpPreview::MultiLine do describe "#matches_json" do subject { parser.matches_json } let(:parser) { RegexpPreview::MultiLine.new(target_path, "multiline", params) } describe "simple usage" do let(:target_path) { File.expand_path("./spec/support/fixtures/error0.log", Rails.root) } let :params do params = { format_firstline: "foo", time_format: "time_format", } params["format1"] = "(?foo)\n" params["format2"] = "(?bar)" 3.upto(Fluentd::Setting::InTail::MULTI_LINE_MAX_FORMAT_COUNT) do |i| params["format#{i}"] = "" end { params: params } end it 'should not have regexp and time_format in [:params][:setting]' do expect(subject[:params][:setting]).to eq(regexp: nil, time_format: nil) end it "should include matches info" do matches_info = { whole: "foo\nbar", matches: [ { key: "foo", matched: "foo", pos: [0, 3] }, { key: "bar", matched: "bar", pos: [4, 7] } ] } expect(subject[:matches]).to include matches_info end end describe "detect only continuos patterns" do let(:target_path) { File.expand_path("./spec/support/fixtures/error0.log", Rails.root) } let(:params) do params = { format_firstline: "foo", time_format: "time_format", } params["format1"] = "(?foo)\n" params["format2"] = "(?baz)" 3.upto(Fluentd::Setting::InTail::MULTI_LINE_MAX_FORMAT_COUNT) do |i| params["format#{i}"] = "" end { params: params } end it "shouldn't match" do expect(subject[:matches]).to eq [] end end describe "example on document" do # http://docs.fluentd.org/articles/in_tail let(:target_path) { File.expand_path("./spec/support/fixtures/multiline_example.log", Rails.root) } let :params do params = { format_firstline: "\\d{4}-\\d{1,2}-\\d{1,2}", "format1" => "^(?