252 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			252 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\sery\wip\schema\_scalar;
 | |
| 
 | |
| use nulib\tests\TestCase;
 | |
| use nulib\ValueException;
 | |
| 
 | |
| class ScalarValueTest extends TestCase {
 | |
|   function checkValue(ScalarValue $value, $dest, bool $present, bool $available, bool $valid, bool $normalized): void {
 | |
|     self::assertSame($dest, $value->get(), "value");
 | |
|     self::assertSame($present, $value->isPresent(), "present");
 | |
|     self::assertSame($available, $value->isAvailable(), "available");
 | |
|     self::assertSame($valid, $value->isValid(), "valid");
 | |
|     self::assertSame($normalized, $value->isNormalized(), "normalized");
 | |
|   }
 | |
| 
 | |
|   function testRawstring() {
 | |
|     $schema = new ScalarSchema("rawstring");
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $string = null;
 | |
|     $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = null;
 | |
|       $value->reset($string);
 | |
|     });
 | |
| 
 | |
|     $string = ""; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "", true, true, true, true);
 | |
|     $string = ""; $value->reset($string);
 | |
|     $this->checkValue($value, "", true, true, true, true);
 | |
| 
 | |
|     $string = "   "; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "   ", true, true, true, true);
 | |
|     $string = "   "; $value->reset($string);
 | |
|     $this->checkValue($value, "   ", true, true, true, true);
 | |
| 
 | |
|     $string = "text"; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "text", true, true, true, true);
 | |
|     $string = "text"; $value->reset($string);
 | |
|     $this->checkValue($value, "text", true, true, true, true);
 | |
| 
 | |
|     $string = "  text  "; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "  text  ", true, true, true, true);
 | |
|     $string = "  text  "; $value->reset($string);
 | |
|     $this->checkValue($value, "  text  ", true, true, true, true);
 | |
| 
 | |
|     $string = false; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, false, true, true);
 | |
|     $string = false; $value->reset($string);
 | |
|     $this->checkValue($value, null, true, false, true, true);
 | |
| 
 | |
|     $string = true; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, true, true, true, true, false);
 | |
|     $string = true; $value->reset($string);
 | |
|     $this->checkValue($value, "1", true, true, true, true);
 | |
| 
 | |
|     $string = 42; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, 42, true, true, true, false);
 | |
|     $string = 42; $value->reset($string);
 | |
|     $this->checkValue($value, "42", true, true, true, true);
 | |
| 
 | |
|     $string = []; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, [], true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = null;
 | |
|       $value->reset($string);
 | |
|     });
 | |
| 
 | |
|     ## Tester nullable
 | |
|     $schema = new ScalarSchema("?rawstring");
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $string = null; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, true, true, true);
 | |
|     $string = null; $value->reset($string, null);
 | |
|     $this->checkValue($value, null, true, true, true, true);
 | |
| 
 | |
|     ## Tester required
 | |
|     $schema = new ScalarSchema(["rawstring", "required" => true]);
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $string = false; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, false, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = false; $value->reset($string);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   function testString() {
 | |
|     $schema = new ScalarSchema("string");
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $string = null; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = null;
 | |
|       $value->reset($string);
 | |
|     });
 | |
| 
 | |
|     $string = ""; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "", true, true, true, true);
 | |
|     $string = ""; $value->reset($string);
 | |
|     $this->checkValue($value, "", true, true, true, true);
 | |
| 
 | |
|     $string = "   "; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "   ", true, true, true, false);
 | |
|     $string = "   "; $value->reset($string);
 | |
|     $this->checkValue($value, "", true, true, true, true);
 | |
| 
 | |
|     $string = "text"; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "text", true, true, true, true);
 | |
|     $string = "text"; $value->reset($string);
 | |
|     $this->checkValue($value, "text", true, true, true, true);
 | |
| 
 | |
|     $string = "  text  "; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, "  text  ", true, true, true, false);
 | |
|     $string = "  text  "; $value->reset($string);
 | |
|     $this->checkValue($value, "text", true, true, true, true);
 | |
| 
 | |
|     $string = false; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, false, true, true);
 | |
|     $string = false; $value->reset($string);
 | |
|     $this->checkValue($value, null, true, false, true, true);
 | |
| 
 | |
|     $string = true; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, true, true, true, true, false);
 | |
|     $string = true; $value->reset($string);
 | |
|     $this->checkValue($value, "1", true, true, true, true);
 | |
| 
 | |
|     $string = 42; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, 42, true, true, true, false);
 | |
|     $string = 42; $value->reset($string);
 | |
|     $this->checkValue($value, "42", true, true, true, true);
 | |
| 
 | |
|     $string = []; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, [], true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = null;
 | |
|       $value->reset($string);
 | |
|     });
 | |
| 
 | |
|     ## Tester nullable
 | |
|     $schema = new ScalarSchema("?string");
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $string = null; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, true, true, true);
 | |
|     $string = null; $value->reset($string, null);
 | |
|     $this->checkValue($value, null, true, true, true, true);
 | |
| 
 | |
|     ## Tester required
 | |
|     $schema = new ScalarSchema(["string", "required" => true]);
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $string = false; $value->reset($string, null, false);
 | |
|     $this->checkValue($value, null, true, false, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = false; $value->reset($string);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   function testInt() {
 | |
|     $schema = new ScalarSchema("int");
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $int = null; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, null, true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $int = null;
 | |
|       $value->reset($int);
 | |
|     });
 | |
| 
 | |
|     $int = 42; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, 42, true, true, true, true);
 | |
|     $int = 42; $value->reset($int);
 | |
|     $this->checkValue($value, 42, true, true, true, true);
 | |
| 
 | |
|     $int = "42"; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, "42", true, true, true, false);
 | |
|     $int = "42"; $value->reset($int);
 | |
|     $this->checkValue($value, 42, true, true, true, true);
 | |
| 
 | |
|     $int = "42.5"; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, "42.5", true, true, true, false);
 | |
|     $int = "42.5"; $value->reset($int);
 | |
|     $this->checkValue($value, 42, true, true, true, true);
 | |
| 
 | |
|     $int = "42,5"; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, "42,5", true, true, true, false);
 | |
|     $int = "42,5"; $value->reset($int);
 | |
|     $this->checkValue($value, 42, true, true, true, true);
 | |
| 
 | |
|     $int = ""; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, "", true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $int = "";
 | |
|       $value->reset($int);
 | |
|     });
 | |
| 
 | |
|     $int = "   "; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, "   ", true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $int = "   ";
 | |
|       $value->reset($int);
 | |
|     });
 | |
| 
 | |
|     $int = "text"; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, "text", true, true, false, true);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $int = "text";
 | |
|       $value->reset($int);
 | |
|     });
 | |
| 
 | |
|     $int = false; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, null, true, false, true, true);
 | |
|     $int = false; $value->reset($int);
 | |
|     $this->checkValue($value, null, true, false, true, true);
 | |
| 
 | |
|     $int = true; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, true, true, true, true, false);
 | |
|     $int = true; $value->reset($int);
 | |
|     $this->checkValue($value, 1, true, true, true, true);
 | |
| 
 | |
|     $int = []; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, [], true, true, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = null;
 | |
|       $value->reset($string);
 | |
|     });
 | |
| 
 | |
|     ## Tester nullable
 | |
|     $schema = new ScalarSchema("?int");
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $int = null; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, null, true, true, true, true);
 | |
|     $int = null; $value->reset($int, null);
 | |
|     $this->checkValue($value, null, true, true, true, true);
 | |
| 
 | |
|     ## Tester required
 | |
|     $schema = new ScalarSchema(["int", "required" => true]);
 | |
|     $value = $schema->newValue();
 | |
| 
 | |
|     $int = false; $value->reset($int, null, false);
 | |
|     $this->checkValue($value, null, true, false, false, false);
 | |
|     self::assertException(ValueException::class, function() use (&$value) {
 | |
|       $string = false; $value->reset($string);
 | |
|     });
 | |
|   }
 | |
| }
 |