mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-27 21:02:35 +00:00
Calendar events ported not passing
This commit is contained in:
257
src/client/result/CalendarParsedResultTestCase.rs
Normal file
257
src/client/result/CalendarParsedResultTestCase.rs
Normal file
@@ -0,0 +1,257 @@
|
||||
/*
|
||||
* Copyright 2007 ZXing authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// package com.google.zxing.client.result;
|
||||
|
||||
// import com.google.zxing.BarcodeFormat;
|
||||
// import com.google.zxing.RXingResult;
|
||||
// import org.junit.Assert;
|
||||
// import org.junit.Before;
|
||||
// import org.junit.Test;
|
||||
|
||||
// import java.text.DateFormat;
|
||||
// import java.text.SimpleDateFormat;
|
||||
// import java.util.Locale;
|
||||
// import java.util.TimeZone;
|
||||
|
||||
// /**
|
||||
// * Tests {@link CalendarParsedRXingResult}.
|
||||
// *
|
||||
// * @author Sean Owen
|
||||
// */
|
||||
// public final class CalendarParsedRXingResultTestCase extends Assert {
|
||||
|
||||
use chrono::{DateTime, NaiveDateTime, Utc};
|
||||
|
||||
use crate::{
|
||||
client::result::{ParsedClientResult, ParsedRXingResultType},
|
||||
BarcodeFormat, RXingResult,
|
||||
};
|
||||
|
||||
use super::{ParsedRXingResult, ResultParser};
|
||||
|
||||
const EPSILON: f64 = 1.0E-10;
|
||||
const DATE_FORMAT_STRING: &'static str = "yyyyMMdd'T'HHmmss'Z'";
|
||||
|
||||
// private static DateFormat makeGMTFormat() {
|
||||
// DateFormat format = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.ENGLISH);
|
||||
// format.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
// return format;
|
||||
// }
|
||||
|
||||
// @Before
|
||||
// public void setUp() {
|
||||
// Locale.setDefault(Locale.ENGLISH);
|
||||
// TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
|
||||
// }
|
||||
|
||||
#[test]
|
||||
fn testStartEnd() {
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nDTEND:20080505T234555Z\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "", "20080504T123456Z", "20080505T234555Z");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testNoVCalendar() {
|
||||
doTestShort(
|
||||
"BEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nDTEND:20080505T234555Z\r\nEND:VEVENT",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"20080504T123456Z",
|
||||
"20080505T234555Z",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testStart() {
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "", "20080504T123456Z", "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testDuration() {
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nDURATION:P1D\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "", "20080504T123456Z", "20080505T123456Z");
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nDURATION:P1DT2H3M4S\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "", "20080504T123456Z", "20080505T143800Z");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testSummary() {
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456Z\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "foo", "", "20080504T123456Z", "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testLocation() {
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nLOCATION:Miami\r\nDTSTART:20080504T123456Z\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "Miami", "20080504T123456Z", "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testDescription() {
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nDESCRIPTION:This is a test\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"This is a test", "", "", "20080504T123456Z", "");
|
||||
doTestShort(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nDESCRIPTION:This is a test\r\n\t with a continuation\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"This is a test with a continuation", "", "", "20080504T123456Z", "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testGeo() {
|
||||
doTest(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nGEO:-12.345;-45.678\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "", "20080504T123456Z", "", "", &Vec::new(), -12.345, -45.678);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testBadGeo() {
|
||||
// Not parsed as VEVENT
|
||||
let fakeRXingResult = RXingResult::new(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nGEO:-12.345\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
Vec::new(),
|
||||
Vec::new(),
|
||||
BarcodeFormat::QR_CODE,
|
||||
);
|
||||
let result = ResultParser::parseRXingResult(&fakeRXingResult);
|
||||
assert_eq!(ParsedRXingResultType::TEXT, result.getType());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testOrganizer() {
|
||||
doTest(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nORGANIZER:mailto:bob@example.org\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "", "20080504T123456Z", "", "bob@example.org", &Vec::new(), f64::NAN, f64::NAN);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testAttendees() {
|
||||
doTest(
|
||||
"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20080504T123456Z\r\nATTENDEE:mailto:bob@example.org\r\nATTENDEE:mailto:alice@example.org\r\nEND:VEVENT\r\nEND:VCALENDAR",
|
||||
"", "", "", "20080504T123456Z", "", "",
|
||||
&vec!["bob@example.org", "alice@example.org"], f64::NAN, f64::NAN);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testVEventEscapes() {
|
||||
doTestShort("BEGIN:VEVENT\nCREATED:20111109T110351Z\nLAST-MODIFIED:20111109T170034Z\nDTSTAMP:20111109T170034Z\nUID:0f6d14ef-6cb7-4484-9080-61447ccdf9c2\nSUMMARY:Summary line\nCATEGORIES:Private\nDTSTART;TZID=Europe/Vienna:20111110T110000\nDTEND;TZID=Europe/Vienna:20111110T120000\nLOCATION:Location\\, with\\, escaped\\, commas\nDESCRIPTION:Meeting with a friend\\nlook at homepage first\\n\\n\n \\n\nSEQUENCE:1\nX-MOZ-GENERATION:1\nEND:VEVENT",
|
||||
"Meeting with a friend\nlook at homepage first\n\n\n \n",
|
||||
"Summary line",
|
||||
"Location, with, escaped, commas",
|
||||
"20111110T110000Z",
|
||||
"20111110T120000Z");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testAllDayValueDate() {
|
||||
doTestShort(
|
||||
"BEGIN:VEVENT\nDTSTART;VALUE=DATE:20111110\nDTEND;VALUE=DATE:20111110\nEND:VEVENT",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"20111110T000000Z",
|
||||
"20111110T000000Z",
|
||||
);
|
||||
}
|
||||
|
||||
fn doTestShort(
|
||||
contents: &str,
|
||||
description: &str,
|
||||
summary: &str,
|
||||
location: &str,
|
||||
startString: &str,
|
||||
endString: &str,
|
||||
) {
|
||||
doTest(
|
||||
contents,
|
||||
description,
|
||||
summary,
|
||||
location,
|
||||
startString,
|
||||
endString,
|
||||
"",
|
||||
&Vec::new(),
|
||||
f64::NAN,
|
||||
f64::NAN,
|
||||
);
|
||||
}
|
||||
|
||||
fn doTest(
|
||||
contents: &str,
|
||||
description: &str,
|
||||
summary: &str,
|
||||
location: &str,
|
||||
startString: &str,
|
||||
endString: &str,
|
||||
organizer: &str,
|
||||
attendees: &[&str],
|
||||
latitude: f64,
|
||||
longitude: f64,
|
||||
) {
|
||||
let fakeRXingResult =
|
||||
RXingResult::new(contents, Vec::new(), Vec::new(), BarcodeFormat::QR_CODE);
|
||||
let result = ResultParser::parseRXingResult(&fakeRXingResult);
|
||||
assert_eq!(ParsedRXingResultType::CALENDAR, result.getType());
|
||||
if let ParsedClientResult::CalendarEventResult(calRXingResult) = result {
|
||||
assert_eq!(description, calRXingResult.getDescription());
|
||||
assert_eq!(summary, calRXingResult.getSummary());
|
||||
assert_eq!(location, calRXingResult.getLocation());
|
||||
let dateFormat = "%c"; //makeGMTFormat();
|
||||
assert_eq!(
|
||||
startString,
|
||||
format_date_string(calRXingResult.getStartTimestamp(), dateFormat) // dateFormat.format(calRXingResult.getStartTimestamp())
|
||||
);
|
||||
assert_eq!(
|
||||
endString,
|
||||
if calRXingResult.getEndTimestamp() < 0i64 {
|
||||
"".to_owned()
|
||||
} else {
|
||||
format_date_string(calRXingResult.getEndTimestamp(), dateFormat)
|
||||
// dateFormat.format(calRXingResult.getEndTimestamp())
|
||||
}
|
||||
);
|
||||
assert_eq!(organizer, calRXingResult.getOrganizer());
|
||||
assert_eq!(attendees, calRXingResult.getAttendees());
|
||||
assertEqualOrNaN(latitude, calRXingResult.getLatitude());
|
||||
assertEqualOrNaN(longitude, calRXingResult.getLongitude());
|
||||
} else {
|
||||
panic!("Expected Calendar");
|
||||
}
|
||||
}
|
||||
|
||||
fn assertEqualOrNaN(expected: f64, actual: f64) {
|
||||
if expected.is_nan() {
|
||||
assert!(actual.is_nan());
|
||||
} else {
|
||||
assert!(expected - actual < EPSILON && actual - expected < EPSILON);
|
||||
// assert_eq!(expected, actual, EPSILON);
|
||||
}
|
||||
}
|
||||
|
||||
fn format_date_string(timestamp: i64, format_string: &str) -> String {
|
||||
NaiveDateTime::from_timestamp(timestamp, 0)
|
||||
.format(format_string)
|
||||
.to_string()
|
||||
// DateTime::from(timestamp,0).with_timezone(Utc).format(format_string).to_string()
|
||||
}
|
||||
Reference in New Issue
Block a user